簡體   English   中英

如何將包含符號和數字的字符串轉換為浮點數或整數列表?

[英]How to convert a string containing symbols and numbers into a list of floats or integers?

我有以下格式的列表:

my_list = ['2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70']

如您所見,它包含作為間隔的字符串。

我正在嘗試將此列表轉換為以下格式:

list_of_lists = [[2.0, 7.0], [10.0, 22.0], [22.0, 50.0], etc....]

我一直在嘗試使用以下結構:

list_2 = []
for item in my_list:
    list_2.append(list(item))
list_3 = [x for x in list_2 if x != "-"]
list_4 = []
for item_2 in list_3:
    var = float(item_2)
    list_4.append(var)

此代碼的問題在於它將兩個數字轉換為兩個單獨的數字。 同樣,總的來說,這並不是一個最佳解決方案。

有人可以提供指導或建議嗎?

干杯:)提前謝謝。

str.split()正確的軌道上,但是缺少的關鍵是str.split()方法,它可以完成此處的大部分繁重工作。

另外,我個人將在頂層使用列表理解來簡化代碼:

>>> [map(float, el.split('-')) for el in my_list]
[[2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0]]

這里:

  • [... el in my_list]以上在琴弦迭代my_list ,適用於每個元件的表達(未示出),並返回結果作為列表;
  • el.split('-')在破折號處分割每個元素,將每個字符串轉換為字符串列表;
  • map(float, ...)將子列表中的每個字符串轉換為float。

試試split函數和map函數

list_2 = []
for item in my_list:
    list_2.append(list(map(float,item.split('-'))))

您可以這樣嘗試:

my_list = ['2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70']

list_2 = []

for val in my_list:
  x , y = map(float, val.split('-'))
  list_2.append([x, y])

print(list_2)

輸出:

[[2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0]]
my_list = ['2-7', '10-22', '22-50', '50-70', 
           '2-7', '10-22', '22-50', '50-70', 
           '2-7', '10-22', '22-50', '50-70']

list_2 = []
for item in my_list:
    first, second = item.split('-')
    list_2.append([float(first), float(second)])

原始列表my_list每個項目都由split()方法分為兩部分,分別分配給變量firstsecond

由於它們仍然是字符串 ,因此在上一條命令中,我使用了float()函數將其轉換為數字。

如果您不想使用map函數,可以使用以下替代方法:

my_list = ['2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70']

my_list_1 = [ [float(elem.split('-')[0]), float(elem.split('-')[1])] for elem in my_list]
print list_1

要么

my_list = ['2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70']

my_list_1 = [ [float(elem[0]), float(elem[1])] for elem in [elem.split('-') for elem in my_list]]
print list_1

這是兩種情況下的結果:

[[2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0]]

暫無
暫無

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

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