簡體   English   中英

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

[英]Convert list of strings into list of integers

我需要將 2 個項目的字符串(用逗號分隔)轉換為整數。

從:

[['(0,3)', '(1,2)', '(2,2)'], ['(0,3)', '(1,2)', '(2,2)']]

至:

[[(0,3), (1,2), (2,2)], [(0,3), (1,2), (2,2)]]

您可以將ast.literal_eval用於該任務:

from ast import literal_eval

lst = [["(0,3)", "(1,2)", "(2,2)"], ["(0,3)", "(1,2)", "(2,2)"]]

lst = [[literal_eval(v) for v in l] for l in lst]
print(lst)

印刷:

[[(0, 3), (1, 2), (2, 2)], [(0, 3), (1, 2), (2, 2)]]

編輯:另一種方法(感謝@S3DEV):

out = [list(map(literal_eval, sub_list)) for sub_list in lst]

快速基准測試:

from timeit import timeit
from ast import literal_eval

lst = [["(0,3)", "(1,2)", "(2,2)"], ["(0,3)", "(1,2)", "(2,2)"]]


def fn1():
    return [[literal_eval(v) for v in l] for l in lst]


def fn2():
    return [list(map(literal_eval, sub_list)) for sub_list in lst]


assert fn1() == fn2()

t1 = timeit(lambda: fn1(), number=1_000)
t2 = timeit(lambda: fn2(), number=1_000)

print(t1)
print(t2)

在我的機器上打印(AMD 3700X,Python 3.9.7):

0.040873110003303736                                                                                                                                                                                           
0.04002662200946361                                                                                                                                                                                            

如果您始終在模式中輸入。

lst = [['(0,3)', '(1,2)', '(2,2)'], ['(0,3)', '(1,2)', '(2,2)']]

new_lst = list(map(lambda i:[eval(a,{}) for a in i],lst))
# OR

# new_lst = list(map(lambda i:list(map(lambda a:eval(a,{}),i)),lst))
print(new_lst)

輸出

[[(0, 3), (1, 2), (2, 2)], [(0, 3), (1, 2), (2, 2)]]
lst = [['(0,3)', '(1,2)', '(2,2)'], ['(0,3)', '(1,2)', '(2,2)']]
new_lst = []
for a in lst:
    l = []
    for i in a:
        i = i[1:-1].split(',')
        t = []
        for num in i:
            t.append(int(num))
        l.append(tuple(t))

    new_lst.append(l)

print(new_lst)

輸出

[[(0, 3), (1, 2), (2, 2)], [(0, 3), (1, 2), (2, 2)]]

或使用地圖功能

lst = [['(0,3)', '(1,2)', '(2,2)'], ['(0,3)', '(1,2)', '(2,2)']]

new_lst = [list(map(lambda e:tuple(map(lambda a:int(a),e[1:-1].split(','))),i)) for i in lst]
print(new_lst)
[[(0, 3), (1, 2), (2, 2)], [(0, 3), (1, 2), (2, 2)]]

暫無
暫無

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

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