[英]List comprehension with Set comprehension in Python
我有一个列表列表,其中包含集合,我想要的是带有单个集合项的列表列表。
即["item1", "item2", {1,2,3,4}, "item4"]
--> [["item1", "item2", 1, "item4"],["item1", "item2", 2, "item4"],["item1", "item2", 3, "item4"],["item1", "item2", 4, "item4"]]
知道如何实现这一目标吗?
假设您只有一个需要以这种方式扩展的集合,并且它始终位于原始列表中的索引 2 处:
data = ["item1", "item2", {1, 2, 3, 4}, "item4"]
result = [data[:2] + [x] + data[3:] for x in data[2]]
print(result)
输出:
[['item1', 'item2', 1, 'item4'], ['item1', 'item2', 2, 'item4'], ['item1', 'item2', 3, 'item4'], ['item1', 'item2', 4, 'item4']]
这是比其他答案更通用的方法,
data = ["item1", "item2", {1,2,3,4}, "item4"]
sets = list(filter(lambda item:True if type(item) == set else False, data))
list(map(data.remove, sets))
new_data = [data + [s] for set_ in sets for s in set_]
输出 -
[['item1', 'item2', 'item4', 1],
['item1', 'item2', 'item4', 2],
['item1', 'item2', 'item4', 3],
['item1', 'item2', 'item4', 4]]
data = ["item1", "item2", {1, 2, 3, 4}, "item4"]
for idx, item in enumerate(data):
if type(item) == set:
for i in list(item):
print(data[:idx] + [i] + data[idx+1:])
输出:
['item1', 'item2', 1, 'item4']
['item1', 'item2', 2, 'item4']
['item1', 'item2', 3, 'item4']
['item1', 'item2', 4, 'item4']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.