我有以下列表
lst = ['Adam,widgets,5769', 'joe,balls,7186', 'greg,tops,1819.999',]
我需要能够获取列表,然后将Adams数字除以100,然后将新数字放回列表中,然后将其添加到gregs total.I首先拆分列表,我是不希望有人纠正代码,我只需要一种方法来分离列表的每个部分,这样我就可以将其视为单独的部分。
for i in sod_hng_hhl_lst:
g=i.split(",")
这给出了
['Adam','widgets','5769']
等
什么是划分数字然后将其添加到列表中另一个组的最佳方法。
答案 0 :(得分:1)
如果您知道总有3个项目,请使用元组解压缩方法:
name,type,number = i.split(',')
# now name="Adam", type="widgets", number="5769"
在您的样本中:
for triplet in sod_hng_hhl_lst:
name,type,numberString = triplet.split(",")
# because this is a string and we want a number:
num_as_integer = int(numberString)
# do something with num_as_integer
new_number = num_as_integer * 2
newtriplet = ','.join([name, type, new_number])
但是,我强烈建议使用值元组而不是分割的字符串:
sod_hng_hhl_lst = [ ('Adam', 'widgets', 5769),
#... etc
]
这样,数字保持为数字,您不必一直加入和拆分字符串。
for idx,triplet in enumerate(sod_hng_hhl_lst):
name,type,number = triplet
new_number = number * 2
# change just the number in the triplet
sod_hng_hhl_lst[idx][2] = new_number
如果人们总是有独特的名字,那么就像mgilson建议你可以使用字典一样:
dct = {"Adam": ('widgets', 5769),
#....
}
迭代:
for person,details in dct.items():
thing, number = details
new_num = number * 2
dct[person][1] = new_num
答案 1 :(得分:1)
In [1]: lst = ['Adam,widgets,5769', 'joe,balls,7186', 'greg,tops,1819.999']
In [2]: lst = [s.split(',') for s in lst]
In [4]: for l in lst:
l[-1] = float(l[-1])
...:
In [5]: for l in lst:
...: if l[0] == "Adam":
...: l[-1] /= 100
...:
In [6]: lst
Out[6]:
[['Adam', 'widgets', 57.69],
['joe', 'balls', 7186.0],
['greg', 'tops', 1819.999]]
答案 2 :(得分:1)
在我看来,字典将是 MUCH 更好的数据结构。
splitter = (x.split(',') for x in original_list)
d = { k:[v1,float(v2)] for k,v1,v2 in splitter }
现在您可以按人名访问数据:
assert d['Adam'][1] == 5769
换句话说,d['Adam']
会为您提供列表['widget',5769]
,您可以在此处更改号码,将其添加到其他人数等等。