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]],对吗?