如何将字符串列表中的元素添加到python数组中
我有一个看起来像这样的字符串列表,我需要将每个列表的第一,第二和第三个条目添加到整数列表ab和c相应地如何将字符串列表中的元素添加到python数组中
打印削减给我
[['3', '5', '10'], ['2', '8', '15'], ['7', '9', '25'], ['4', '6', '20'], ['9', '12', '50'], ['5', '7', '22'], ['3', '8', '17'], ['6', '9', '24'], ['8', '11', '40'], ['7', '10', '30'], []]
使得 A = [3,2,7,...,7] b = [5,8,9,...,10] c = [10,15,...,30]
(也希望这些是整数而不是字符串)
我试图通过
cuts[i] = cuts[i].strip(",")
划以为这样就可以给我[3] [5] [10]这将让我有一个增加对循环,但蟒蛇告诉我名单不有一个带属性
以下是基本形式列表解析:
data = [['3', '5', '10'], ['2', '8', '15'], ['7', '9', '25'], ['4', '6', '20'],
['9', '12', '50'], ['5', '7', '22'], ['3', '8', '17'], ['6', '9', '24'],
['8', '11', '40'], ['7', '10', '30'], []]
a = [int(x[0]) for x in data if len(x) >= 1]
b = [int(x[1]) for x in data if len(x) >= 2]
c = [int(x[2]) for x in data if len(x) >= 3]
print a
print b
print c
或者,让他们在2维列表:
abc = [[int(x[i]) for x in data if len(x) >= i+1] for i in range(len(data[0]))]
print abc
输出:
[[3, 2, 7, 4, 9, 5, 3, 6, 8, 7],
[5, 8, 9, 6, 12, 7, 8, 9, 11, 10],
[10, 15, 25, 20, 50, 22, 17, 24, 40, 30]]
我假设在cuts
末的空列表是一个错字 - 否则你的要求不太有意义,因为没有第一,第二和一个空列表的第三个元素。你总是可以使用
cuts = [cut for cut in cuts if len(cut) > 0]
如果你想削减规模。
在任何情况下,一旦空列表被删除,你问的是一个排序zip
并且可以像这样做:
>>> cuts = [['3', '5', '10'], ['2', '8', '15'], ['7', '9', '25'], ['4', '6', '20'], ['9', '12', '50'], ['5', '7', '22'], ['3', '8', '17'], ['6', '9', '24'], ['8', '11', '40'], ['7', '10', '30']]
>>> a,b,c = ([int(s) for s in strings] for strings in zip(*cuts))
>>> a
[3, 2, 7, 4, 9, 5, 3, 6, 8, 7]
>>> b
[5, 8, 9, 6, 12, 7, 8, 9, 11, 10]
>>> c
[10, 15, 25, 20, 50, 22, 17, 24, 40, 30]
这可以使用内置的zip
函数来完成。
a, b, c = zip(*cuts)
你可以阅读关于邮编here。要点是在这里 -
这个函数返回一个元组的列表,其中第i元组包含 第i个元素从每个参数序列或iterables
如果再想你的列表可以保存数字而不是字符串,你可以通过int函数映射它们。
a = map(int, a)
b = map(int, b)
c = map(int, c)
很难不爱像'a,b,c = zip(* cuts)'那样的优雅的单行纸片。另外 - 我认为在这种情况下,你使用'map'比相应的理解更具可读性。 –
您列表中列表中的最后一个列表是一个空列表。那是故意的吗? –