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']
我有一个包含集合的列表列表,我想要的是包含单个集合项的列表列表。
即["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']