如何使用合并元素制作嵌套列表?

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 将流拆分成组。然后只需连接正确的位即可。