[英]How do I change the type of elements of a 2D list?
我有一個通過打開txt文件得到的列表。 該列表是一個二維列表,看起來像:
[['25 1 100.5 2 300'], ['50 3 125.5 4 85']]
我希望子列表不是字符串,而是整數(當列表中的位置不均勻時)和浮點數(當位置在列表中為偶數時)。 例如,我希望列表看起來像:
[[25.0, 1, 100.5, 2, 300.0], [50.0, 3, 125.5, 4, 85.0]]
到目前為止,我已經嘗試過
list = [['25 1 100.5 2 300'], ['50 3 125.5 4 85']]
for x in list:
str_to_num = x.split()
那就是我不知道如何分隔哪個元素將成為浮點數和哪個將成為整數的地方。
list = [['25 1 100.5 2 300'], ['50 3 125.5 4 85']]
new_list = []
for x in list:
new_list.append([float(y) for y in x[0].split(" ")])
這會將所有數字轉換為浮點數。 當然,假設您只有一個字符串,每個列表均帶有數字。
祝好運。
您的問題是您的x.split()試圖拆分列表而不是字符串(請注意,['25 1 100.5 2 300']是其中包含一個元素的列表,即字符串'25 1 100.5 2 300')。 如果子列表始終只有一個這樣的字符串,則可以使用x [0] .split()來修復代碼。
這是一個組合的更正編輯,假定您希望在獲取int或float時將其設為int:
def to_number(num_str):
try:
return_value = int(num_str)
except ValueError:
return_value = float(num_str)
return return_value
old_list = [['25 1 100.5 2 300'], ['50 3 125.5 4 85']]
new_list = []
for x in old_list:
num_strs = x[0].split()
new_list.append([to_number(_) for _ in num_strs])
您要單線嗎?
In [27]: ll = [['25 1 100.5 2 300'], ['50 3 125.5 4 85']]
In [28]: [[(int(x) if i%2 else float(x)) for i,x in
enumerate(l[0].split())] for l in ll]
Out[28]: [[25.0, 1, 100.5, 2, 300.0], [50.0, 3, 125.5, 4, 85.0]]
如果您對int / float的區分不挑剔,則可以這樣做:
In [32]: [[float(x) for x in l[0].split()] for l in ll]
Out[32]: [[25.0, 1.0, 100.5, 2.0, 300.0], [50.0, 3.0, 125.5, 4.0, 85.0]]
對於許多數值運算,值是浮點數1.0
還是整數1
並不重要。
區分int和float的另一種方法是int(astr)
引發錯誤( int('1')
v int('1.23')
)
要使用它,我必須定義一個小功能:
In [44]: def foo(astr):
try:
return int(astr)
except ValueError:
return float(astr)
....:
In [45]: [[foo(x) for x in l[0].split()] for l in ll]
Out[45]: [[25, 1, 100.5, 2, 300], [50, 3, 125.5, 4, 85]]
在這種情況下,僅中間字符串顯示為浮點數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.