Получить весь первый элемент кортежей из списка списков кортежей в Python - PullRequest
0 голосов
/ 28 мая 2020
Input: 
orders = [[('Fries', 9)], [('Burger', 6), ('Milkshake', 2), ('Cola', 2)], [('Cola', 2), ('Nuggets', 3), ('Onion Rings', 5)], [('Fries', 9)], [('Big Burger', 7), ('Nuggets', 3)]]

Expected Output:  
orders = [['Fries'], ['Burger', 'Milkshare', 'Cola'], ['Cola', 'Nuggets', 'Onion Rings'], ['Fries'], ['Big Burger', 'Nuggets']]

Моя попытка:

 for i, order in enumerate(orders):
        for j,item in enumerate(order):
            orders[i][j] = item[0]

Работает нормально. Но есть ли более интуитивный / однострочный / более быстрый / более крутой способ сделать это?

Ответы [ 5 ]

2 голосов
/ 28 мая 2020

Или просто [[item[0] for item in order] for order in orders]

1 голос
/ 28 мая 2020
output = [[item[0] for item in order] for order in orders]

display(output)

[['Fries'],
['Burger', 'Milkshake', 'Cola'],
['Cola', 'Nuggets', 'Onion Rings'],
['Fries'],
['Big Burger', 'Nuggets']]
1 голос
/ 28 мая 2020

Вот go:

output = [[item[0] for item in order] for order in orders]
0 голосов
/ 28 мая 2020

Вы можете изолировать ключи, заархивировав каждый заказ и вернув первый индекс каждого результата.
Ниже приведен список кортежей:

orders2 = [list(zip(*order))[0] for order in orders]

Если вам нужен список списков, используйте это:

orders2 = [list(a) for a in [list(zip(*order))[0] for order in orders]]

Пример кода

orders = [[('Fries', 9)], [('Burger', 6), ('Milkshake', 2), ('Cola', 2)], [('Cola', 2), ('Nuggets', 3), ('Onion Rings', 5)], [('Fries', 9)], [('Big Burger', 7), ('Nuggets', 3)]]

# For a list of tuples
orders2 = [list(zip(*order))[0] for order in orders]
print(*orders2) # ('Fries',) ('Burger', 'Milkshake', 'Cola') ('Cola', 'Nuggets', 'Onion Rings') ('Fries',) ('Big Burger', 'Nuggets')                         


# If you need a list of lists
orders2 = [list(a) for a in [list(zip(*order))[0] for order in orders]]
print(*orders2) # ['Fries'] ['Burger', 'Milkshake', 'Cola'] ['Cola', 'Nuggets', 'Onion Rings'] ['Fries'] ['Big Burger', 'Nuggets']                           


Live Code -> https://onlinegdb.com/SklIG1q6iU

0 голосов
/ 28 мая 2020

Здесь с одним л oop и одним вкладышем:

l=[]
for order in orders:
    l.append([name[0] for order in orders for name in order])
l

Вывод:

[['Fries'],
 ['Burger', 'Milkshake', 'Cola'],
 ['Cola', 'Nuggets', 'Onion Rings'],
 ['Fries'],
 ['Big Burger', 'Nuggets']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...