问题是这样,拿两个列表,例如这两个:
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
编写一个程序,返回一个列表,该列表只包含列表之间通用的元素(没有重复)。确保您的程序适用于两个不同大小的列表。
这是我的代码:
a = [1, 1, 2, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
c = []
for i in a:
if i in b and i not in c:
c.append([i])
print(c)
尽管'我不在c'声明,我的输出仍然给我重复。为什么是这样?我敢肯定它显而易见,我只是看不到它!
答案 0 :(得分:4)
i
的列表附加到c
,因此i not in c
将始终返回True
。您应该自行添加i
:c.append(i)
或者
只需使用集合(如果顺序不重要):
a = [1, 1, 2, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
c = set(a) & set(b) # & calculates the intersection.
print(c)
# {1, 2, 3, 5, 8, 13}
编辑作为@Ev。 Kounis在评论中建议,你将通过使用
获得一些速度
c = set(a).intersection(b)
。
答案 1 :(得分:0)
以下代码将起作用:
newlist = []
for x in b:
if x in a:
if x in newlist:
print("duplicate")
else:
newlist.append(x)
for y in newlist:
print(y)
答案 2 :(得分:0)
使用集合的直觉,您可以执行以下操作...
filtered_arr = list(set(b)-set(a))
首先将2个数组转换为集合,然后用其替代将结果再次转换为列表。
答案 3 :(得分:0)
c = []
for items in a:
for numbers in b:
if items == numbers:
if items in c:
None
else:
c.append(items)
print(c)
答案 4 :(得分:0)
使用列表推导,我认为如果按照以下方式实现,它将变得简短而简单
Show All Branches
结果:
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
[i for i in a and b if i in a and b]
答案 5 :(得分:0)
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
result = []
[(result.append(i)) for i in a if i in b and i not in result]
print(result) # [1, 2, 3, 5, 8, 13]