按其中一个值在无序排列的子列表中查找值

2024-06-16 12:34:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子

items = [
    ["e",None,None],
    ["pork","pork.png","meat"],
    ["beef","b.png","meat"],
    ["cheese","c.png","not"],
    ]
items_list = ["e","beef","pork","beef"]
shuffle(items_list)

如何在没有索引的情况下打印子列表中的第二个或第三个值?你知道吗

for i in items_list:
    print ???

Tags: innone列表forpngnot情况items
2条回答

这个怎么样:

from random import shuffle

items = [
    ["e",None,None],
    ["pork","pork.png","meat"],
    ["beef","b.png","meat"],
    ["cheese","c.png","not"],
    ]

items_list = ["e","beef","pork","beef"]
shuffle(items_list)

for item in items_list:
    for orig_item in items:
        try:
            orig_item.index(item)
            print(item, orig_item)
        except ValueError:
            pass

输出:

beef ['beef', 'b.png', 'meat']
pork ['pork', 'pork.png', 'meat']
e ['e', None, None]
beef ['beef', 'b.png', 'meat']

这可能比@pm2ring的答案慢(我没有测量),因为有两个循环和异常处理。你知道吗

使用orig_item[1]访问子列表的第二个元素

您可以将items子列表存储在字典中,按它们的第一个元素进行索引。你知道吗

from random import shuffle

items = [
    ["e",None,None],
    ["pork","pork.png","meat"],
    ["beef","b.png","meat"],
    ["cheese","c.png","not"],
]

items_dict = {u[0]: u for u in items}

items_list = ["e","beef","pork","beef"]
shuffle(items_list)

for s in items_list:
    print(s, items_dict[s])

输出

beef ['beef', 'b.png', 'meat']
e ['e', None, None]
beef ['beef', 'b.png', 'meat']
pork ['pork', 'pork.png', 'meat']

要打印第二项(即PNG):

for s in items_list:
    print(s, items_dict[s][1])

输出

e None
beef b.png
beef b.png
pork pork.png

这是相当有效的,因为没有创建新的列表:items_dict中的列表与items中的列表对象相同。因此,如果需要,可以通过itemsitems_dict对这些列表进行变异。你知道吗

items_dict["cheese"].append("cheddar")
print(items[3])

items[0][2] = "something"
print(items_dict["e"])

输出

['cheese', 'c.png', 'not', 'cheddar']
['e', None, 'something']

你不需要这个items_dict,但是另一个选择是一个双for循环,如果items很大,它会变得非常低效。你知道吗

for s in items_list:
    for seq in items:
        if seq[0] == s:
            print(s, seq)
            break

输出

beef ['beef', 'b.png', 'meat']
e ['e', None, None]
beef ['beef', 'b.png', 'meat']
pork ['pork', 'pork.png', 'meat']

相关问题 更多 >