繁体   English   中英

Python中的交叉引用列表

[英]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 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

注意:您可能希望为其添加一些错误处理。 索引错误

测试运行:

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循环

这应该做你想要的:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM