Возьмите соответствующие строки из списка и создайте новый список - PullRequest
1 голос
/ 29 октября 2019

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

Mylist = [cat, cat, dog, dog, bear, camel, camel, camel]

Так что мне нужно добраться до точки, где:

Catlist = [cat,cat]

Doglist = [dog, dog]

Bearlist = [bear]

Camellist = [camel, camel, camel]

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

На мой оригинальный вопрос ответили;однако мне нужно немного расширить сферу моего вопроса. Допустим, у меня теперь есть матрица animal_data, которая состоит из 4 столбцов: Animal, Xlocation, Ylocation и Zlocation, а первый столбец содержит исходные входные данные MyList, а остальные три содержат местоположения gps каждого животного в поле. ,Как я могу разделить свою матрицу на куски в зависимости от типа животного? Это то, что я имею до сих пор:

setofthis = set(animal_data[:,0])

IDS = {

}

for one in setofthis:
    ids = [one for i in animal_data[:,0] if i == one]
    IDS.update({one:ids})

for one in result:
    print(one, ":", IDS[one])

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

Ответы [ 3 ]

0 голосов
/ 29 октября 2019
Mylist = ['cat', 'cat', 'dog', 'dog', 'bear', 'camel', 'camel', 'camel']
cats = []
dogs = []
camels = []

for item in Mylist:
    if item == 'cat':
        cats += [item]
    if item == 'dog':
        dogs += [item]
    if item == 'camel':
        camels += [item]

print(cats)
print(dogs)
print(camels)
0 голосов
/ 29 октября 2019

Вы также можете использовать этот простой кусок кода с пониманием списка

Mylist = ["cat", "cat", "dog", "dog", "bear", "camel", "camel", "camel"]
setofthis = set(Mylist)

result = {
}
for one in setofthis:
    res = [one for i in Mylist if i == one]
    result.update({one: res})

for one in result:
    print(one, " : ",result[one])

, из этого вы получите что-то вроде этого

dog  :  ['dog', 'dog']
bear  :  ['bear']
cat  :  ['cat', 'cat']
camel  :  ['camel', 'camel', 'camel']
0 голосов
/ 29 октября 2019

Использование отдельных переменных для каждого списка - не самый лучший способ, тем более что вы заранее не знаете, что содержат данные. Вы должны использовать структуру данных, например, словарь, чтобы облегчить работу с данными и хранить их в одном месте.

Вы можете использовать itertools.groupby , чтобы превратить ваш список в словарьсписки. Ключи - это животное, а значения - список животных. Вам нужно убедиться, что список отсортирован, чтобы идентичные животные были сгруппированы:

from itertools import groupby

Mylist = ['cat', 'dog', 'bear', 'camel', 'camel','cat', 'camel','dog']
animals = {k:list(g) for k, g in groupby(sorted(Mylist))}

Результат animals:

{'bear': ['bear'],
 'camel': ['camel', 'camel', 'camel'],
 'cat': ['cat', 'cat'],
 'dog': ['dog', 'dog']}

Отсюда вы можете получить свои индивидуальные списки попросто проиндексировать в словаре:

print(animals['cat']) # ['cat', 'cat']
...