根据Python中的值查找列表中的位置?

我是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项就会返回,而不会不必要地枚举其余项.

上一篇:机器学习算法之BIRCH


下一篇:Linux信号量动作和说明列表