好吧,我有一个小问题:
def common(a,b,c):
a.sort()
b.sort()
c.sort()
i = 0
j = 0
k = 0
common=False
while i<len(a) and j<len(b):
if a[i] == b[j]:
if b[j] == c[k]:
return True
else:
k = k+1
continue
else:
if i == len(a):
j = j+1
else:
i = i+1
return common
a=[3, 1, 5, 10]
b=[4, 2, 6, 1]
c=[5, 3, 1, 7]
print common(a,b,c)
基本上,它必须告诉我列表中是否有共同的元素。使用1它可以工作,但是如果我将8替换为1,它就不再起作用了。
答案 0 :(得分:2)
你的'j'永远不会增加,1正在工作,因为在sort
之后它是第一个元素并且不需要增加j
。
我的建议是将您的列表转换为集合,并使用intersection(&amp;)
检查常用元素def common(a,b,c):
common = set(a) & set(b) & set(c)
return True if common else False
a=[3, 8, 5, 10]
b=[4, 2, 6, 8]
c=[5, 3, 8, 7]
print common(a,b,c)
答案 1 :(得分:0)
您当前的算法仅在b
列表中的最小值与其他列表相同时才有效。如果有不同的常用值,您将永远找不到它,因为您将i
增加到len(a)
,然后退出。
我认为您需要更改逻辑,以便增加指向最小值的列表索引。如果a[i]
小于b[j]
,则需要增加i
。如果c[k]
较少,则应该增加它。
答案 2 :(得分:0)
您编程的内容根本不符合您的期望,因此您需要重新考虑您的逻辑。如果您查看循环,首先要检查a[0]
是否与b[0]
匹配。不,所以添加到i
。然后,您将a[1]
与b[0]
,nope等进行比较。如果没有匹配b[0]
,则退出循环而不检查b
的其他元素。它适用于列表中的1,因为在排序之后,这些恰好位于所有三个列表中的第一个位置。
无论如何,这非常笨重。通过集合交叉点可以更轻松地完成此操作。请参阅此相关question。