繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM