查找由字符串组成的列表中的数字并将其转换为浮点数



我想做一个练习,我有一个列表:

list_1 = ['chocolate;1.20', 'book;5.50', 'hat;3.25']

我需要创建第二个列表,看起来像这样:

list_2 = [['chocolate', 1.20], ['book', 5.50], ['hat', 3.25]]

第二个列表中的数字必须是浮点数,不带"

到目前为止,我得到了以下代码:
for item in list_1:
list_2.append(item.split(';'))

输出看起来是正确的:

[['chocolate', '1.20'], ['book', '5.50'], ['hat', '3.25']]

但是我如何将这些数字转换成浮点数并删除双引号呢?

我试着:

for item in list_2:
if(item.isdigit()):
item = float(item)

得到:

AttributeError: 'list' object has no attribute 'isdigit'
list_1 = ['chocolate;1.20', 'book;5.50', 'hat;3.25']
list_2 = [x.split(';') for x in list_1]
list_3 = [[x[0], float(x[1])] for x in list_2]

item是一个类似['chocolate', '1.20']的列表。你应该在item[1]上呼叫isdigit(),而不是item。但是当字符串包含.时,isdigit()不为真,因此无论如何也不能工作。

将拆分字符串放入变量中,然后对第二个元素调用float()

for item in list_1:
words = item.split(';')
words[1] = float(words[1])
list_2.append(words)

我不知道这对你是否有帮助。但是,我认为使用function比使用简单的for循环要好试试吧。

def list_map(string_val,float_val):
return [string_val,float_val]
def string_spliter(list_1):
string_form=[]
float_form=[]

for string in list_1:
str_val,float_val=string.split(";")
string_form.append(str_val)
float_form.append(float_val)
return string_form,float_form
list_1 = ['chocolate;1.20', 'book;5.50', 'hat;3.25']

string_form,float_form=string_spliter(list_1)
float_form=list(map(float,float_form))
output=list(map(list_map,string_form,float_form))
print(output)

您创建list_2的方式很好。要创建新的列表,可以使用final_list = [[i[0], float(i[1])] for i in list_2]

你也可以在for循环中这样做:

for item in list_1:
split_item = item.split(';')
list_2.append([split_item[0], float(split_item[1])])

这可以通过使用列表推导式的两行代码来实现。

list_1 = ['chocolate;1.20', 'book;5.50', 'hat;3.25']
list_2 = [[a, float(b)] for x in list_1 for a, b in [x.split(';', 1)]]

第二个维度对列表推导式生成具有单个子列表的列表。这让我们基本上保存了拆分每个项的结果,然后将这两个项绑定到ab,使它们的使用更简洁,而不必指定索引。

注意:通过使用第二个参数1调用split,我们可以确保字符串最多只拆分一次。

您可以使用函数映射来转换每个值。

def modify_element(el): 
name, value = el.split(';')
return [name, float(value)]
list_1 = ['chocolate;1.20', 'book;5.50', 'hat;3.25']
result = list(map(modify_element, list_1))

对于这样的问题,您可以为调用split函数的结果初始化两个变量,然后附加两个值的列表,并对第二个值调用内置的float函数。

array = []
for i in a_list:
string, number = i.split(";")
array.append([string, float(number)])
print(array)

最新更新