[英]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()
方法分為兩部分,分別分配給變量first
和second
。
由於它們仍然是字符串 ,因此在上一條命令中,我使用了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.