簡體   English   中英

將字符串列表列表轉換為整數

[英]convert a list of strings list into integers

請問你能幫幫我嗎? 我使用 Python 3.x 並將此變量 ex 轉換為整數列表。

ex = [['2003', '12', '27', '7', '8646'],
      ['2003', '12', '28', '7', '7645'],
      ['2003', '12', '29', '2', '12823'],
      ['2003', '12', '30', '2', '14438'],
      ['2003', '12', '31', '3', '12374']]

我試過這個功能,但它不能正常工作:

liste = []

def function_int(x):
    for i in x:
        liste.append(int[i])
    return liste

感謝您的支持!

你實際上是在那里。 如果要處理嵌套列表,則需要嵌套循環

像這樣的東西。

def function_int(ex):
    liste = []
    for i in x:
        liste.append([])
        for j in i:
        liste[-1].append(int(i))

    return liste

在每次外部迭代中,我們將下一個內部列表附加到外部列表中。 在每次內部迭代中,將轉換后的整數值附加到最近附加的內部列表。

另請注意, int是一個函數,用括號稱它,而不是方括號。


或者,您可以使用列表解析來執行此操作。

liste = [[int(y) for y in x] for x in ex]

哪個更簡潔,可讀性損失最小。


另一種可能性是轉換期間出現ValueError的可能性。 只有在使用嵌套循環代碼時才能處理它。 你可以使用try-except處理程序來完成它。

try:
    liste[-1].append(int(i))
except ValueError:
    pass

除了其他答案,您可以使用另一種方法:

integer_x = [list(map(int, each)) for each in x]
print(integer_x)

看看ast模塊

你可以這樣做:

import ast
liste = []  
for l in ex:
   for i in range(len(l)):
      l[i] = ast.literal_eval(l[i])
   liste.append(l)

您的問題是ex是一個列表列表。 因此,如果您想將ex中的所有內容放入新列表中,則需要兩個循環:

for i in x: 
    for j in i: 
        liste.append(int(j))

在我看來,這是執行速度最快,效率最高的方式,注意:如果你想要一個新的列表然后改變ex[:] = to liste =或者你想要調用你的變量,它會覆蓋ex

try:
    #check out this module for faster string checking
    from fastnumbers import *
except:
    pass

ex = [['2003', '12', '27', '7', '8646'],
      ['2003', '12', '28', '7', '7645'],
      ['2003', '12', '29', '2', '12823'],
      ['2003', '12', '30', '2', '14438'],
      ['2003', '12', '31', '3', '12374']]

ex[:] = [[int(e) if e.isdigit() else e for e in sl] for sl in ex]

結果:

for sublist in ex:
    print (sublist)

[2003, 12, 27, 7, 8646]
[2003, 12, 28, 7, 7645]
[2003, 12, 29, 2, 12823]
[2003, 12, 30, 2, 14438]
[2003, 12, 31, 3, 12374]

要解釋切片表示法,尤其是在=左側使用,請參閱此問題: 賦值如何與python list slice一起使用

暫無
暫無

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

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