如何从较大的元素列表中删除较小的元素列表

时间:2020-10-24 17:53:33

标签: python list subset

我找到了其他答案,但我不认为他们在做我想要的事情。我也无法理解所提供的答案,因此我不知道如何实现它们。由于他们都是别人的老答案,所以我认为他们不会回答我的问题。我之前尝试过,但没人回答。

长话短说,我早些搞砸了,一开始应该创建一个组合列表,但我没有。而且我不会重新运行其他代码,因为没有意义。当然,不用说,这显然不是我的真实数据集,而只是我想要做的事情的较小图片。

我有两个较小的列表,并且创建了一个较大的组合列表。由于循环的工作方式,我将在组合列表和较小的列表之间重复。我想从较大的列表中删除重复项。

编辑:我的素食清单上只有蔬菜。我的水果清单上只有水果。我的组合列表兼有。我的输出是输入列表中元素的组合。在我的组合列表中,我想要的只是水果和蔬菜的组合。我不想要仅水果的组合,也不想只蔬菜在组合列表中的组合。

使用下面的示例:我的combo_output中不希望从fruit_output和veggie_output中获取任何内容。

fruit_input = ["Apple", "Banana" "Pear", "Peach", "Grape"]

fruit_output = sum([list(map(list, combinations(fruit_input, i))) for i in range(len(fruit_input) + 1)], [])

veggies_input = ["Lettuce", "Cabbage", "Califlour", "Broccoli", "String_Beans", "Celery"]

veggies_output = sum([list(map(list, combinations(veggies_input, i))) for i in range(len(veggies_input) + 1)], [])

combo_input = ["Apple", "Banana" "Pear", "Peach", "Grape",
               "Lettuce", "Cabbage", "Califlour", "Broccoli", "String_Beans", "Celery"]

combo_output = sum([list(map(list, combinations(combo_input, i))) for i in range(len(combo_input) + 1)], [])

基本上,如果[“ Apple”,“ Banana”,“ Pear”]在fruit_output中,则不应在组合输出中。我想要的只是组合,是蔬菜和水果。

编辑: 在veggie_out中,您将看到以下内容:

['Lettuce', 'Cabbage', 'Califlour'],
 ['Lettuce', 'Cabbage', 'Broccoli'],
 ['Lettuce', 'Cabbage', 'String_Beans'],

在fruit_out中,您会看到类似以下内容:

['Apple', 'BananaPear', 'Grape'],
 ['Apple', 'Peach', 'Grape'],
 ['BananaPear', 'Peach', 'Grape'],
 ['Apple', 'BananaPear', 'Peach', 'Grape']]

在组合中,您将看到所有这些内容:

['Lettuce', 'Cabbage', 'Califlour'],
 ['Lettuce', 'Cabbage', 'Broccoli'],
 ['Lettuce', 'Cabbage', 'String_Beans'],
['Apple', 'BananaPear', 'Grape'],
 ['Apple', 'Peach', 'Grape'],
 ['BananaPear', 'Peach', 'Grape'],
 ['Apple', 'BananaPear', 'Peach', 'Grape'],
['Apple', 'Peach', 'Grape', 'Cabbage', 'Califlour', 'Broccoli', 'Celery'],
 ['Apple', 'Peach', 'Grape', 'Cabbage', 'Califlour', 'String_Beans', 'Celery'],
 ['Apple', 'Peach', 'Grape', 'Cabbage', 'Broccoli', 'String_Beans', 'Celery'],

这就是我想发生的事情:

['Apple', 'Peach', 'Grape', 'Cabbage', 'Califlour', 'Broccoli', 'Celery'],
 ['Apple', 'Peach', 'Grape', 'Cabbage', 'Califlour', 'String_Beans', 'Celery'],
 ['Apple', 'Peach', 'Grape', 'Cabbage', 'Broccoli', 'String_Beans', 'Celery'],

组合正在重复在水果和蔬菜输出中分别执行的操作,而我在那里没有输出。我只想要水果和蔬菜的组合。

1 个答案:

答案 0 :(得分:0)

colors = ("blue", "red", "green"), ("silver", "purple", "green"), ("silver", "purple", "green")
numbers = ("one", "two", "three"), ("one", "two", "three"), ("one", "two", "three")
# unique set, same set, unique set, same set
combo = ("blue", "red", "yellow"), ("silver", "purple", "green"), ("one", "two", "ten"), ("one", "two", "three")
# so we expect to see 5 unique total sets
color_numbers = colors + numbers #here we are adding the sets together

unique = set(color_numbers).union(combo) #using set to get only unique values and union to retreive the same values between lists
print(unique)

输出

{('one', 'two', 'three'), ('silver', 'purple', 'green'), ('blue', 'red', 'yellow'), ('blue', 'red', 'green'), ('one', 'two', 'ten')}

我相信您想要使用某种过滤器方法进行设置,如此处https://www.programiz.com/python-programming/methods/set/union