[英]Can you use AND in List comprehension conditional statements?
我正在尝试使用列表理解来执行以下操作。 我要创建一个新列表(唯一),该列表只有两个列表中的通用数字。
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有重复的数字,我会得到重复。 即list1 = [1,1,2],list2 = [1,5]。 我创建了清单理解为
unique = [list1[listcomp] for listcomp in range(len(list1)) if list1[listcomp] in list2 and list1[listcomp] not in unique]
如果我得到重复的东西,我会认为“ and”语句没有被应用? 我已经阅读了有关将if语句进一步移动到comprehension语句的其他查询,但这没有用。 您可以使用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
配方中可以找到标准实现。
如果您拥有3rd party toolz
库,则可以使用相同的toolz.unique
并提供生成器表达式。 更像Pythonic,您可以直接迭代元素,而不是使用索引:
from toolz import unique
unique = list(unique(i for i in list1 if i in list2))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.