【发布时间】:2018-07-03 09:50:52
【问题描述】:
我正在尝试使用列表理解来执行以下操作。我想创建一个新列表(唯一),其中只有两个列表中的公共数字。
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 语句进一步移动到理解语句的其他查询,但这没有用。你可以使用 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}")
【问题讨论】:
标签: python python-3.x list list-comprehension