Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按其中一个值在子列表的无序列表中查找值_Python_List - Fatal编程技术网

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

Python 按其中一个值在子列表的无序列表中查找值,python,list,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:

我有一个列表,如果列表

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 ???

您可以将
子列表存储在字典中,并按它们的第一个元素进行索引

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']
e None
beef b.png
beef b.png
pork pork.png
['cheese', 'c.png', 'not', 'cheddar']
['e', None, 'something']
beef ['beef', 'b.png', 'meat']
e ['e', None, None]
beef ['beef', 'b.png', 'meat']
pork ['pork', 'pork.png', 'meat']

要打印第二项(即PNG):

输出

beef ['beef', 'b.png', 'meat']
e ['e', None, None]
beef ['beef', 'b.png', 'meat']
pork ['pork', 'pork.png', 'meat']
e None
beef b.png
beef b.png
pork pork.png
['cheese', 'c.png', 'not', 'cheddar']
['e', None, 'something']
beef ['beef', 'b.png', 'meat']
e ['e', None, None]
beef ['beef', 'b.png', 'meat']
pork ['pork', 'pork.png', 'meat']

这是相当有效的,因为没有创建新的列表:
items\u dict
中的列表与
items
中的列表对象相同。因此,如果您愿意,您可以通过
项目
项目
对这些列表进行变异

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

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

beef ['beef', 'b.png', 'meat']
e ['e', None, None]
beef ['beef', 'b.png', 'meat']
pork ['pork', 'pork.png', 'meat']
e None
beef b.png
beef b.png
pork pork.png
['cheese', 'c.png', 'not', 'cheddar']
['e', None, 'something']
beef ['beef', 'b.png', 'meat']
e ['e', None, None]
beef ['beef', 'b.png', 'meat']
pork ['pork', 'pork.png', 'meat']

您不需要使用
项_dict
,但另一种选择是双
for
循环,如果
很大,则该循环会非常低效

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']
e None
beef b.png
beef b.png
pork pork.png
['cheese', 'c.png', 'not', 'cheddar']
['e', None, 'something']
beef ['beef', 'b.png', 'meat']
e ['e', None, None]
beef ['beef', 'b.png', 'meat']
pork ['pork', 'pork.png', 'meat']
这个怎么样:

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]
访问子列表的第二个元素

可能包括示例输入和输出。现在还不清楚你想在这里做什么,你是在问如何获取子列表的索引吗?听起来很简单,首先我该如何将我的列表定义为字典?每个项目都会像:['e':[None,None]],对吗?