我是Python的新手,我正在寻找一些新的代码形式.
我在一到二十之间选择了5个随机数,这里有两个列表.像这样.
list = []
listn = []
import random
for i in range(5):
newvar = random.randomint(1,20)
list.append(newvar)
newvart = random.randomint(1,20)
listn.append(newvart)
然后我在同一个代码中选择另一个变量.
evar = random.randomint(1,20)
我想要做的是查看数字是否在两个列表中,如果是,它们是否在列表中的相同位置.我应该通过以下方式开始:
if (evar in list) and (evar in listn):
但我不知道如何做其余的事情.我想知道evar是否在两个列表中并且在两个列表中处于相同位置(即它是list和listn中的第三个数字).我该怎么做?
解决方法:
假设使用list.index()
method首先找到的位置应该相同:
def f(lst1, lst2, value):
try: return lst1.index(value) == lst2.index(value)
except ValueError:
return False
使用set intersection允许所有头寸:
def positions(lst, value):
return (pos for pos, x in enumerate(lst) if x == value)
def f(lst1, lst2, value):
return bool(set(positions(lst1, value)).intersection(positions(lst2, value)))
甚至更好:基于zip()的解决方案由@wim建议:
from itertools import izip
def f(lst1, lst2, value):
return any(x1 == x2 == value for x1, x2 in izip(lst1, lst2))
注意:any()
一找到第一个True项就会返回,而不会不必要地枚举其余项.