如何将字符串列表中的元素添加到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]这将让我有一个增加对循环,但蟒蛇告诉我名单不有一个带属性

+1

您列表中列表中的最后一个列表是一个空列表。那是故意的吗? –

以下是基本形式列表解析:

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]] 
+1

或者如果len(x)> = i + 1] for i in range(len(len)),那么您可以将a,b,c减少为这个数据中的x的[a,b,c = (data [0])))' – KronoS

+0

非常正确。我递给他一种技巧;这是他编程工具包中的另一个很好的选择。 – Prune

我假设在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) 
+0

很难不爱像'a,b,c = zip(* cuts)'那样的优雅的单行纸片。另外 - 我认为在这种情况下,你使用'map'比相应的理解更具可读性。 –