我正在尝试创建一个接受输入的函数,将该输入与列表列表进行比较,并从具有相同数量的对象的另一个列表中返回一个项目。
示例:
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的新手,并且一直在思考这个问题并且四处寻找没有结果的线索。任何可能帮助我解决这个问题的提示/线索将不胜感激!谢谢!
答案 0 :(得分:3)
您可以遍历list_1
中的每个列表,并检查输入是否在一个中。如果是,则可以打印相应的list_2
索引(假设它仅由单个值组成),这是通过在循环中使用枚举获得的。
input = 1
for idx,i in enumerate(list_1):
if input in i:
return list_2[idx]
在这种情况下,我返回了'a'
。
答案 1 :(得分:3)
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"
答案 2 :(得分:1)
为了更灵活,您可以在函数的开头创建一个字母列表(至少在本例中)。
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
答案 3 :(得分:1)
功能:
def find_list_two_value(value, list_1, list_2):
for i in list_1:
if value in i:
return list_2[list_1.index(i)]
return none
注意:您可能想要为其添加一些错误处理。 Index Error
试运行:
list_1 = [[1,2,3],[4,5],[6,7,8]]
list_2 = ['a','b','c']
print find_list_two_value(6, list_1, list_2)
output: c
文档: For loop
答案 4 :(得分:0)
这应该做你想要的:
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