簡體   English   中英

如何將字符串列表中的元素添加到python中的數組

[英]How to add elements in a list of strings to an array in python

我有一個看起來像這樣的字符串列表,我需要將每個字符串的第一,第二和第三項添加到整數列表ab和c中

剪裁給我

[['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]],這會讓我添加一個for循環,但是python告訴我列表沒有strip屬性

以下是基本形式的列表理解:

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

或者,將它們保留在二維列表中:

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

可以使用內置的zip功能完成此操作。

a, b, c = zip(*cuts)

您可以在此處閱讀有關zip的信息 要點在這里-

此函數返回一個元組列表,其中第i個元組包含每個參數序列或可迭代對象中的第i個元素

然后,如果您希望列表保留數字而不是字符串,則可以將它們映射到int函數上。

a = map(int, a)
b = map(int, b)
c = map(int, c)

我假設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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM