Python中的交叉引用列表

时间:2015-08-04 00:31:32

标签: python list python-2.7 python-3.x for-loop

我正在尝试创建一个接受输入的函数,将该输入与列表列表进行比较,并从具有相同数量的对象的另一个列表中返回一个项目。

示例:

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的新手,并且一直在思考这个问题并且四处寻找没有结果的线索。任何可能帮助我解决这个问题的提示/线索将不胜感激!谢谢!

5 个答案:

答案 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