[英]Cross Referencing Lists in Python
我正在尝试创建一个接受输入的函数,将该输入与列表列表进行比较,并从具有相同数量的对象的另一个列表中返回一个项目。
例:
list_1=[[1,2,3],[4,5],[6,7,8]]
list_2=['a','b','c']
如果input
是1,2或3函数返回'a'
如果input
为4或5,则函数返回'b'
如果input
是6,7或8函数返回'c'
我是python的新手,一直在思考这个问题并且四处寻找没有结果的线索。 任何可能帮助我解决这个问题的提示/线索将不胜感激! 谢谢!
您可以循环遍历list_1
每个列表,并检查输入是否在一个列表中。 如果是,则可以打印list_2
的相应索引(假设它仅由单个值组成),这是通过在循环中使用枚举获得的。
input = 1
for idx,i in enumerate(list_1):
if input in i:
return list_2[idx]
在这种情况下,我返回'a'
。
zip是一种组合(“拉链在一起”)列表的功能。
它将从每个列表生成对:
>>> combined = zip(list_1, list_2)
[([1, 2, 3], 'a'), ([4, 5], 'b'), ([6, 7, 8], 'c')]
>>> test_key = 5
>>> for keys, value in combined:
... if test_key in keys:
... print value
'b'
额外的预处理可以让您直接查找值。 例如,您可以将给定值(从第二个列表)的所有键(从第一个列表)写入dict
。
>>> value_dict = {}
>>> for keys, value in combined:
... for key in keys:
... value_dict[key] = value
>>> value_dict
{1: 'a', 2: 'a', 3: 'a', 4: 'b', 5: 'b', 6: 'c', 7: 'c', 8: 'c'}
>>> value_dict[5]
'b'
>>> value_dict.get(42, "not found")
"not found"
为了更灵活,您可以在函数的开头创建一个字母表列表(至少在本例中)。
def crossRef(inList, inputNum):
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
i = 0
for listItem in inList:
if inputNum in listItem:
return alphabet[i]
i += 1
return None
这应该做你想要的:
def crossReferenceInLists(input, list1, list2):
for index, item in enumerate(list1):
if input not in item:
continue
try:
return list2[index]
except IndexError:
return None
return None
print(crossReferenceInLists(2, [[1, 2, 3], [4, 5], [6, 7, 8]], ['a', 'b', 'c']))
print(crossReferenceInLists(7, [[1, 2, 3], [4, 5], [6, 7, 8]], ['a', 'b', 'c']))
$ python so.py
一种
C
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.