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']