найти значения в перетасованном списке подписок одним из значений

У меня есть список, если списки

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

Чтобы напечатать второй элемент (например, 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 , но альтернатива – это двойной цикл, который становится очень неэффективным, если 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'] 

Как насчет этого:

 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] для доступа ко второму элементу подсписок