gpt4 book ai didi

python - 您可以在列表理解条件语句中使用 AND 吗?

转载 作者:行者123 更新时间:2023-12-01 01:47:18 25 4
gpt4 key购买 nike

我正在尝试使用列表理解来执行以下操作。我想创建一个新列表(唯一),其中仅包含两个列表中的公共(public)数字。

unique = []
for listcomp in range(len(list1)):
if list1[listcomp] in list2 and list1[listcomp] not in unique:
unique.append(list1[listcomp])
else:
continue

上面工作正常,但是当我创建下面的列表理解时,如果 list1 有重复的数字,我会得到重复的值。即列表 1 = [1, 1, 2],列表 2 = [1, 5]。我将列表理解创建为

unique = [list1[listcomp] for listcomp in range(len(list1)) if list1[listcomp] in list2 and list1[listcomp] not in unique]

如果我收到重复项,我认为“and”语句没有被应用?我读过有关将 if 语句进一步移至理解语句的其他查询,但这不起作用。您可以使用 AND 来扩展您的条件吗?

非常感谢

我的完整代码是:-

import random as rnd
# Randomly generate the size of your list
list1size = rnd.randint(1,20)
list2size = rnd.randint(1,20)
# Declare your list variables
list1 = []
list2 = []
# Fill your lists with randomly generated numbers upto the listsize generated above
for x in range(list1size):
list1.append(rnd.randint(1,15))
for y in range(list2size):
list2.append(rnd.randint(1,15))
# Not required but easier to read lists once sorted
list1.sort()
list2.sort()
print(list1)
print(list2)
# Now to compare old school

unique = []
# for listcomp in range(len(list1)):
# if list1[listcomp] in list2 and list1[listcomp] not in unique:
# unique.append(list1[listcomp])
# else:
# continue

# Now to compare with list comprehension
unique = [list1[listcomp] for listcomp in range(len(list1)) if list1[listcomp] in list2 and list1[listcomp] not in unique]
# Above doesn't stop duplicates if they are in List1 so I assume you can't use AND

print(f"The common numbers in both lists are {unique}")

最佳答案

您无法在进行过程中访问列表理解生成的元素。您的情况list1[listcomp] not in unique将始终返回 True从那时起unique被定义为 unique = [] 中初始化的空列表.

所以and语句正在应用,但不是您想要的方式。

相反,您可以创建一个“已看到”set拿着你已经找到的元素并忽略它们。标准实现可在 itertools 中找到。 unique_everseen recipe .

如果您有第 3 方 toolz 库,您可以使用相同的 toolz.unique并提供生成器表达式。更Pythonic,您可以直接迭代元素而不是使用索引:

from toolz import unique

unique = list(unique(i for i in list1 if i in list2))

关于python - 您可以在列表理解条件语句中使用 AND 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51151521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com