如何使用合并元素制作嵌套列表?
How to make nested list with merged elements?
假设我有一个列表:
l = ['1 bd', '1 ba', '565 sqft', '- Apartment for rent', '2 bds', '1 ba', '1,200 sqft', '- Apartment for rent', 'None', '2 bds', '1 ba', '-- sqft', '- Apartment for rent', '1 bd', '1 ba', '382 sqft', '- Apartment for rent', 'None', '1 bd', '1 ba', '615 sqft', '- Apartment for rent', '1 bd', '1 ba', '478 sqft', '- Apartment for rent', '1 bd', '1 ba', '529 sqft', '- Apartment for rent']
如何制作嵌套列表,以便其中的不同列表可以包含不同数量的合并元素?
预期输出:
l = [['1 bd, 1 ba, 565 sqft, - Apartment for rent'], ['2 bds, 1 ba, 1,200 sqft, - Apartment for rent'], ['None'], ['2 bds, 1 ba, -- sqft, - Apartment for rent'], ['1 bd, 1 ba, 382 sqft, - Apartment for rent'], ['None'], ['1 bd, 1 ba, 615 sqft, - Apartment for rent'], ['1 bd, 1 ba, 478 sqft, - Apartment for rent'], ['1 bd, 1 ba, 529 sqft, - Apartment for rent']]
列表中的项目不必与上面的完全一样(逗号或连字符)。我的目标是以有意义的方式将它们组合在一起。
您可以使用 itertools
accumulate()
和 groupby()
执行此操作。例如:
from itertools import accumulate, groupby
key = ['for rent' in e or e == 'None' for e in l]
[', '.join([v for k, v in g]) for _, g in groupby(zip(accumulate([0] + key), l), key=lambda gv: gv[0])]
给出:
['1 bd, 1 ba, 565 sqft, - Apartment for rent',
'2 bds, 1 ba, 1,200 sqft, - Apartment for rent',
'None',
'2 bds, 1 ba, -- sqft, - Apartment for rent',
'1 bd, 1 ba, 382 sqft, - Apartment for rent',
'None',
'1 bd, 1 ba, 615 sqft, - Apartment for rent',
'1 bd, 1 ba, 478 sqft, - Apartment for rent',
'1 bd, 1 ba, 529 sqft, - Apartment for rent']
解释:
我们做一个key
来检测“一个列表的结尾”:要么'for rent'
在字符串中,要么字符串是'None'
(当然,调整ad lib ).
累积然后分组(第一个列表为 0,第二个列表为 1,依此类推)
Groupby 将流拆分成组。然后只需连接正确的位即可。
假设我有一个列表:
l = ['1 bd', '1 ba', '565 sqft', '- Apartment for rent', '2 bds', '1 ba', '1,200 sqft', '- Apartment for rent', 'None', '2 bds', '1 ba', '-- sqft', '- Apartment for rent', '1 bd', '1 ba', '382 sqft', '- Apartment for rent', 'None', '1 bd', '1 ba', '615 sqft', '- Apartment for rent', '1 bd', '1 ba', '478 sqft', '- Apartment for rent', '1 bd', '1 ba', '529 sqft', '- Apartment for rent']
如何制作嵌套列表,以便其中的不同列表可以包含不同数量的合并元素?
预期输出:
l = [['1 bd, 1 ba, 565 sqft, - Apartment for rent'], ['2 bds, 1 ba, 1,200 sqft, - Apartment for rent'], ['None'], ['2 bds, 1 ba, -- sqft, - Apartment for rent'], ['1 bd, 1 ba, 382 sqft, - Apartment for rent'], ['None'], ['1 bd, 1 ba, 615 sqft, - Apartment for rent'], ['1 bd, 1 ba, 478 sqft, - Apartment for rent'], ['1 bd, 1 ba, 529 sqft, - Apartment for rent']]
列表中的项目不必与上面的完全一样(逗号或连字符)。我的目标是以有意义的方式将它们组合在一起。
您可以使用 itertools
accumulate()
和 groupby()
执行此操作。例如:
from itertools import accumulate, groupby
key = ['for rent' in e or e == 'None' for e in l]
[', '.join([v for k, v in g]) for _, g in groupby(zip(accumulate([0] + key), l), key=lambda gv: gv[0])]
给出:
['1 bd, 1 ba, 565 sqft, - Apartment for rent',
'2 bds, 1 ba, 1,200 sqft, - Apartment for rent',
'None',
'2 bds, 1 ba, -- sqft, - Apartment for rent',
'1 bd, 1 ba, 382 sqft, - Apartment for rent',
'None',
'1 bd, 1 ba, 615 sqft, - Apartment for rent',
'1 bd, 1 ba, 478 sqft, - Apartment for rent',
'1 bd, 1 ba, 529 sqft, - Apartment for rent']
解释:
我们做一个key
来检测“一个列表的结尾”:要么'for rent'
在字符串中,要么字符串是'None'
(当然,调整ad lib ).
累积然后分组(第一个列表为 0,第二个列表为 1,依此类推)
Groupby 将流拆分成组。然后只需连接正确的位即可。