我想做一个练习,我有一个列表:
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)]]
第二个维度对列表推导式生成具有单个子列表的列表。这让我们基本上保存了拆分每个项的结果,然后将这两个项绑定到a
和b
,使它们的使用更简洁,而不必指定索引。
注意:通过使用第二个参数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)