所以我的项目列表很长,我需要为所有匹配的项目创建一个新列表。 这是一个简化的示例:
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])
输入的数据集总是在变化,因此并不是每次都有相同的动物出现在数据集中,并且不同的动物也可能会添加到数据集中。
答案 0 :(得分:0)
为每个列表使用单独的变量不是行之有效的方法-尤其是因为您事先不知道数据包含什么。您应该使用像字典这样的数据结构来使数据易于使用并将其保存在一个地方。
您可以使用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']
答案 1 :(得分:0)
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)
答案 2 :(得分:0)
您还可以将这段简单的代码用于列表理解
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']