繁体   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