如果列表
,我有一个列表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 ???
答案 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
中的列表对象相同。因此,如果您愿意,可以通过items
或items_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]
访问子列表的第二个元素