как сохранить значения из списка списков в отдельный список в python? - PullRequest
1 голос
/ 15 апреля 2020

У меня есть список списков, и я хочу сохранить некоторые из его значений в отдельном списке. мой список списков называется data, который был проанализирован из файла данных. файл данных имел заголовки, в которых указывалось, какие значения под ним представлены.

заголовки выглядят примерно так: fruit, animal, technology, drink, color

первые несколько элементов data выглядят примерно так:

[[apple,  dog,  phone,    water, black], 
     [banana, cat,  laptop,   milk,  pink], 
     [melon,  bird, computer, juice, green]]

я хочу сгруппировать значения по категориям, чтобы я мог отсортировать. это довольно большой список, поэтому я хотел бы перебрать все это с помощью al oop или чего-то еще, но я не уверен, как это сделать.

я хочу вывод, похожий на этот, но для всех элементов во внешнем списке:

fruits = [apple, banana, melon]

как мне это сделать?

любая помощь приветствуется, поскольку я новичок в python, спасибо!

Ответы [ 3 ]

2 голосов
/ 15 апреля 2020

Вы можете использовать zip с распаковкой параметров, чтобы разделить списки непосредственно на переменные:

data = [["apple",  "dog",  "phone",    "water", "black"], 
        ["banana", "cat",  "laptop",   "milk",  "pink"], 
        ["melon",  "bird", "computer", "juice", "green"]]

fruits,animals,techs,drinks,colours = map(list,zip(*data))

output:

print(fruits)  # ['apple', 'banana', 'melon']
print(animals) # ['dog', 'cat', 'bird']
print(techs)   # ['phone', 'laptop', 'computer']
print(drinks)  # ['water', 'milk', 'juice']
print(colours) # ['black', 'pink', 'green']

, если вы хотите только фрукты или любые другие комбинации столбцов , вы можете просто игнорировать другие части:

fruits,*_ = map(list,zip(*data))

_,animals,_,drinks,_ = map(list,zip(*data))

Или вы можете превратить ваши данные в словарь:

keys     = ("fruits","animals","techs","drinks","colours")
dataDict = { key:list(values) for key,values in zip(keys,zip(*data)) }

print(dataDict)

{
 'fruits':  ['apple', 'banana', 'melon'], 
 'animals': ['dog', 'cat', 'bird'], 
 'techs':   ['phone', 'laptop', 'computer'], 
 'drinks':  ['water', 'milk', 'juice'], 
 'colours': ['black', 'pink', 'green']
}
2 голосов
/ 15 апреля 2020

То, что вы действительно хотите сделать, это повернуть 2d список. Здесь есть отличный ответ о том, как это сделать, но я кратко изложу основную идею, стоящую за ним.

Если x - это предоставленный вами массив, то есть

x = [[apple,  dog,  phone,    water, black], 
     [banana, cat,  laptop,   milk,  pink], 
     [melon,  bird, computer, juice, green]]

Тогда все, что вам нужно, это

rotated = list(zip(*x))
fruits = rotated[0]
animals = rotated[1]
# etc.

. Это делается следующим образом:

  • * x распаковывает x, так что zip вызывается с
    zip([apple, dog, ...], [banana, cat, ...], [melon, bird, ...])
  • zip затем разбирает внутренние списки и создает объект zip.
  • list преобразует его обратно в список.

Предполагается, что fruit будет всегда будет с индексом 0, animal всегда будет с индексом 1 и т. д. c.

Если это не так, то вам нужно будет создать набор значений для каждой категории, а затем выполнить итерацию через список вручную, чтобы разобраться.

knownFruits = {banana, melon, apple, pineapple, guava}
knownAnimals = {dog, cat, bird, leopard, shark}
fruits = []
animals = []

for row in x:
    for elem in row:
        if elem in fruits:
            fruits.append(elem)
        elif elem in animals:
            animals.append(elem)
#etc.
0 голосов
/ 15 апреля 2020
list_of_list = [ [apple, dog, phone, , water, black], 
                 [banana, cat, laptop, milk, pink], 
                 [melon, bird, computer, juice, green] ] 

Обратите внимание, что все list_of_list [i] [0] являются фруктами, list_of_list [i] [1] являются животными и т. Д. c

Итак, вы хотите l oop по списку и назначить каждому элементу списка соответствующий выходной список

# initialize the output lists
fruits,animals,devices,drinks,colors = []
for inner_list in list_of_lists:
    fruits.append(inner_list[0])
    animals.append(inner_list[1])
    # repeat for rest of list


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...