簡體   English   中英

使用Python將列表中所有列表中的字符串更改為整數

[英]Change string to integer in all lists inside a list using Python

我懂了:

X = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]

我想實現這一目標:

X = [[0.4,0,6],[0.2,0,3],[0.1,0,8]]

我需要進行更改,因為它導致我發生ValueError:

array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: invalid literal for float(): 0.1,0,8

有誰知道如何進行更改?

這樣做可以保留數據的float / int特征:

import ast
X = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]

print([list(ast.literal_eval(e[0])) for e in X])

結果:

[[0.4, 0, 6], [0.2, 0, 3], [0.1, 0, 8]]

每個列表只有一個元素,其中包含一個元組。 在sole元素上使用ast.literal_eval返回一個tuple ,轉換為list您想要的內容。

這些子列表中有字符串,這使它有些混亂。 您需要先將它們拆分,然后再將每個項目轉換為float

>>> [[float(i) for i in lst[0].split(',')] for lst in X]
[[0.4, 0.0, 6.0], [0.2, 0.0, 3.0], [0.1, 0.0, 8.0]]

您可以使用eval()將它們從字符串轉換為元組,並使用list()創建元組列表:

a = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]

b = []

for x in a:
    b.append(list(eval(x[0])))

您可以使用ast.literal_eval

import ast

X = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]
l = [list(ast.literal_eval(i[0])) for i in X]

輸出:

>>> l
[[0.4, 0, 6], [0.2, 0, 3], [0.1, 0, 8]]

為了避免文本的脆弱解析和危險的eval() ,可以使用ast.literal_eval()

>>> X = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]
>>> import ast
>>> X=[ast.literal_eval(i[0]) for i in X]
>>> X
[(0.4, 0, 6), (0.2, 0, 3), (0.1, 0, 8)]
>>> 

暫無
暫無

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

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