我是 Python 的新手,目前正在解决问题以提高我的编码技能。我遇到了一个问题,我需要从 3 Lists
中找到共同元素。在 python 中并打印公共(public)元素的数量。
我的代码和程序如下:
print "Enter n: "
n = raw_input()
print "Enter the values: "
nlist = map(int, raw_input().split())
print "Enter m: "
m = raw_input()
print "Enter the values: "
mlist = map(int, raw_input().split())
print "Enter k: "
k = raw_input()
print "Enter the values: "
klist = map(int, raw_input().split())
plist = []
qlist = []
for x in range(0,int(n)):
for y in range(0,int(m)):
if (nlist[x]==mlist[y]):
plist.append(nlist[x])
for z in range(0,int(k)):
for u in range(0,len(plist)):
if (klist[z]==plist[u]):
qlist.append(klist[z])
print len(qlist)
首先,我从前两个 Lists - nlist and mlist
中找到了共同的元素并将它们存储在一个新的 List - plist
中然后拿了第三个List - klist
并在 Lists - plist and klist
中找到共同元素并将它们添加到新的 List - qlist
中并找到最后的长度 List
.我在想如果 Lists
的长度怎么办?非常高,比如 4000 和两个 for
根据我的理解,循环运行 4000 次迭代非常耗时。那么如何优化此类问题以及解决此类问题的更好方法是什么以及可以使用哪些方法来改进代码以提高性能并在更短的时间内产生输出。请帮助我理解这一点。提前致谢。非常感谢您的帮助。
最佳答案
看看set.intersection :
>>> nlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> mlist = [1, 3, 5, 7, 9]
>>> klist = [1, 4, 7, 10]
>>> set(nlist).intersection(mlist)
{1, 3, 5, 9, 7}
>>> set(nlist).intersection(mlist).intersection(klist)
{1, 7}
关于python - 优化多个for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35380384/