繁体   English   中英

在 Python 中使用集合推导进行列表推导

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM