通过其中一个值在洗牌的子列表中查找值

时间:2017-04-07 15:31:09

标签: python list

如果列表

,我有一个列表
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 ???

2 个答案:

答案 0 :(得分:0)

您可以将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循环,如果{{非常效率低{} {1}}很大。

items

<强>输出

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

答案 1 :(得分:0)

这个怎么样:

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']

由于两个循环和异常处理,这可能比@PM 2Ring的回答慢(我还没有测量过)。

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