我真的在努力制作python代码。任何帮助将非常感谢。我需要编写代码的函数如下。由于数字是输入中的字符串,我知道我不能以某种方式按学生的名字分开,我想我必须以某种方式将数字转换为int / float,然后以某种方式将列表按名称分成子列表(即。通过字符串)但我不知道如何实现这一目标。我知道我可以使用map(int,)将某些东西变成int但它似乎没有工作,并且等级的数量(即str我需要变成float)可以与任何输入不同
谢谢!
代码:
def string_list(L):
'''(list of str) -> list of list
Given a list of strings where each string has the format:
'name, grade, grade, grade, ...' return a new list of
lists where each inner list has the format :
[name (str), grade, grade, grade, ...] where the name
is a string and the grades are floats.
>>> string_list(['Joe, 60, 90, 80', 'Harry, 60, 70', 'Jill, 98.5, 100, 95.5, 98'])
[['Joe', 60.0, 90.0, 80.0], ['Harry', 60.0, 70.0], ['Jill', 98.5, 100.0, 95.5, 98.0]]
'''
答案 0 :(得分:0)
def string_list(L):
final_list = []
for element in L:
new_entry = element.split(',') # Split on commas; returns a list of strings
new_entry = [x.strip() for x in new_entry] # Remove whitespace from each string in list
new_entry[1:] = [float(x) for x in new_entry[1:]] # Cast all entries but the first to float
final_list.append(new_entry)
return final_list
答案 1 :(得分:0)
要爱魔法列表理解!
[[float(val) if val.strip().isdigit() else val.strip() for val in person.split(',')] for person in L]
相同的列表理解,但对于窄屏:
[[float(val) if val.strip().isdigit() else val.strip()
for val in person.split(',')]
for person in L ]
你可以像这样使用你的功能:
def string_list(L):
return [[float(val) if val.strip().isdigit() else val.strip() for val in person.split(',')] for person in L]
并像这样使用它:
>>> L = ["Joe, 60, 90, 80", "Harry, 60, 70", "Jill, 98.5, 100, 95.5, 98"]
>>> string_list(L)
[['Joe', 60.0, 90.0, 80.0],
['Harry', 60.0, 70.0],
['Jill', '98.5', 100.0, '95.5', 98.0]]
列表理解很棒但很难看!因此,让我们将这个庞然大物分解成相应的部分:
for person in L]
对于我们列表中的每个项目(例如"Joe, 60, 90, 80"
)
for val in person.split(',')
如果我们将每个字符串拆分成一个字符串列表,那么
"Joe, 60, 90, 80"
- > ["Joe","60","90","80"]
并对每个元素("Joe"
或"60"
等)进行迭代,并将每个值存储为val
float(val) if val.strip().isdigit() else val.strip()
如果val
仅包含数字字符(.isdigit()
),则将其转换为浮点数。否则,返回字符串(没有空格字符,如空格.strip()
)
[[<code> for val in person.<more>] for person in L]
内部括号将人的元素分组,没有它们,您只能获得一个字符串列表。
如果您想要一个列表,则需要重新排序
for <thing> in <list>
,如下所示:[float(val) if val.strip().isdigit() else val.strip() for person in L for val in person.split(',') ]