Python 添加列表元素

Python 添加列表元素,python,list,Python,List,我最后的名单是这样的 lst = ['Ram:50', 'Ram:80', 'Ram:90', 'Ram:20', 'Sam:40', 'Sam:70', 'Sam:80'] 如何从Python中将所有Ram分离到一个列表中,并将所有Sam分离到另一个列表中 例如: [50,80,90,20] [40,70,80] 使用: 我刚才看到root45的解决方案是类似的,但要简单得多 一天后回来总结一下共同的智慧: for name in ('Ram', 'Sam'): globals(

我最后的名单是这样的

lst = ['Ram:50', 'Ram:80', 'Ram:90', 'Ram:20', 'Sam:40', 'Sam:70', 'Sam:80']
如何从Python中将所有Ram分离到一个列表中,并将所有Sam分离到另一个列表中

例如:

[50,80,90,20]
[40,70,80] 
使用:

我刚才看到root45的解决方案是类似的,但要简单得多

一天后回来总结一下共同的智慧:

for name in ('Ram', 'Sam'):
    globals()[name] = [int(x[x.find(":")+1:]) for x in lst if x[:x.find(":")] == name]

也可以使用正则表达式和列表理解来完成-

>>> list = ['Ram:50', 'Ram:80', 'Ram:90', 'Ram:20', 'Sam:40', 'Sam:70', 'Sam:80']
>>> [re.findall(r'[0-9]*$',s)[0] for s in list if 'Ram' in s]
['50', '80', '90', '20']
>>> [re.findall(r'[0-9]*$',s)[0] for s in list if 'Sam' in s]
['40', '70', '80']

这是一个健壮的解决方案

第一阶段将输入列表转换为
[(键,值),(键,值)…]形式的元组列表。
map
操作使用此处的split函数执行此转换

l = ['Ram:50', 'Ram:80', 'Ram:90', 'Ram:20', 'Sam:40', 'Sam:70', 'Sam:80']

def split( input ):
    sp = input.split(":")
    return (sp[0], sp[1])
l2 = map(split, l)
print l2

#[('Ram', '50'), ('Ram', '80'), ('Ram', '90'), ('Ram', '20'), ('Sam', '40'), ('Sam', '70'), ('Sam', '80')]
第二阶段在这样一个列表上迭代并填充
存储
目录。如果键不存在,它将创建一个映射到键的列表(一个元素)。除此之外,它还将添加到该列表中

store = {}
for i in l2:
    key, value = i[0], i[1] 
    if key not in store.keys():
        store[key] = [value]
    else:
        store[key].append(value)

print store
#{'Ram': ['50', '80', '90', '20'], 'Sam': ['40', '70', '80']}
更高级的是像这样初始化D

D = collections.defaultdict(list)

如果列表已由
'ram'
排序,则
'sam'
可以执行此操作

>>> from itertools import groupby
>>> from operator import itemgetter
>>> lst = ['Ram:50', 'Ram:80', 'Ram:90', 'Ram:20', 'Sam:40', 'Sam:70', 'Sam:80']
>>> [[int(y) for x,y in v] for k,v in groupby((el.split(':') for el in lst),itemgetter(0))]
[[50, 80, 90, 20], [40, 70, 80]]

你试过什么?很简单:,将值添加到相应的列表中。你到底有什么问题?如果名称是“Ramu”和“Sam”,那么答案就不需要进行根本性的更改。为什么要使用
partition
over
split
?@jamylak,如果没有分隔符,分区就不会失败。通常它比split稍快
store = {}
for i in l2:
    key, value = i[0], i[1] 
    if key not in store.keys():
        store[key] = [value]
    else:
        store[key].append(value)

print store
#{'Ram': ['50', '80', '90', '20'], 'Sam': ['40', '70', '80']}
>>> lis = ['Ram:50', 'Ram:80', 'Ram:90','Ram:20', 'Sam:40', 'Sam:70', 'Sam:80']
>>> D = {'Ram':[], 'Sam':[]}
>>> for k,v in (x.partition(':')[::2] for x in lis):
...    D[k].append(v)
... 
>>> D['Ram']
['50', '80', '90', '20']
>>> D['Sam']
['40', '70', '80']
D = collections.defaultdict(list)
>>> from itertools import groupby
>>> from operator import itemgetter
>>> lst = ['Ram:50', 'Ram:80', 'Ram:90', 'Ram:20', 'Sam:40', 'Sam:70', 'Sam:80']
>>> [[int(y) for x,y in v] for k,v in groupby((el.split(':') for el in lst),itemgetter(0))]
[[50, 80, 90, 20], [40, 70, 80]]