Python 返回名称和等级转换为浮动的新列表?

Python 返回名称和等级转换为浮动的新列表?,python,python-3.x,Python,Python 3.x,这个函数有问题。 谁能帮我修一下吗 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 :

这个函数有问题。 谁能帮我修一下吗

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(['Anna, 50, 90, 80', 'Bill, 60, 70', 'Cal, 98.5, 100, 95.5, 98'])
[['Anna', 50.0, 90.0, 80.0], ['Bill', 60.0, 70.0], ['Cal', 98.5, 100.0, 95.5, 98.0]]
'''
new_string_list = []
for grades in L:
    if grades.isnumeric():
        grades = float(grades)
        new_string_list.append([grades])
        for name in L:
            if name.isalpha():
                new_string_list.append([name])
return new_string_list.append([name, grades])
给你:

students = ['Anna, 50, 90, 80', 'Bill, 60, 70', 'Cal, 98.5, 100, 95.5, 98']
result = []
for item in students:
  parts = item.split(', ')
  item_result = parts[:1] + [float(y) for y in parts[1:]]
  result.append(item_result)
print(result)
# [['Anna', 50.0, 90.0, 80.0], ['Bill', 60.0, 70.0], ['Cal', 98.5, 100.0, 95.5, 98.0]]
输出:

[['Anna', 50.0, 90.0, 80.0],
 ['Bill', 60.0, 70.0],
 ['Cal', 98.5, 100.0, 95.5, 98.0]] 

只是一个列表:

>>> a
['Anna, 50, 90, 80', 'Bill, 60, 70', 'Cal, 98.5, 100, 95.5, 98']
>>> r=[[float(j) if j.replace('.', '').isdigit()  else j for j in i.split(", ")] for i in a]
>>> r
[['Anna', 50.0, 90.0, 80.0], ['Bill', 60.0, 70.0], ['Cal', 98.5, 100.0, 95.5, 98.0]]
如果您检查索引:

>>> a=['Anna, 50, 90, 80', 'Bill, 60, 70', 'Cal, 98.5, 100, 95.5, 98']
>>> r=[[float(j) if i.split(", ").index(j)!=0 else j for j in i.split(", ")] for i in a]
>>> r
[['Anna', 50.0, 90.0, 80.0], ['Bill', 60.0, 70.0], ['Cal', 98.5, 100.0, 95.5, 98.0]]

您可以尝试以下方法:

双线解决方案:

输出:

[['Anna', 50.0, 90.0, 80.0], ['Bill', 60.0, 70.0], ['Cal', 98.5, 100.0, 95.5, 98.0]]
详细解决方案:

float_list=[]
for i in split_it:
    sub_list=[]
    for j in i[1:]:
        sub_list.append(float(j))

    float_list.append(i[:1]+sub_list)

print(float_list)
第一步是拆分字符串,以便我们可以迭代每个元素:

split_it=[]  #storing new splited result here 

for i in list_1:
    split_it.append(str(i).replace(",","").split())

print(split_it)
[['Anna', '50', '90', '80'], ['Bill', '60', '70'], ['Cal', '98.5', '100', '95.5', '98']]
现在,下一步是迭代每个子列表,保留str之后的第一个元素,并将其余元素转换为float:

我建议您在使用列表理解之前应该了解列表理解的实际工作原理:

list=[i for i in a]
同:

现在回到解决方案:

float_list=[]
for i in split_it:
    sub_list=[]
    for j in i[1:]:
        sub_list.append(float(j))

    float_list.append(i[:1]+sub_list)

print(float_list)
所有联合收割机:

输出:

[['Anna', 50.0, 90.0, 80.0], ['Bill', 60.0, 70.0], ['Cal', 98.5, 100.0, 95.5, 98.0]]


看看你的成绩。所有项目仍然是字符串。哦,是的,抱歉,但我编辑了。这很有效,但请注意,规范是位置性的,而不是情境性的:每个内部列表都有格式:[name str,grade,grade,grade,…],其中名称是字符串,成绩是浮动的。啊,是的,理解了,我编辑我的帖子时使用了一个解决方案检查索引只是为了好玩,有一个线性表达式:[[i[:i.index','],*[s在i[i.index',“+1::.split',']]在g中的i]。。。其中g是您的输入列表。如果这是一个家庭作业问题,你可能无法逃脱。有没有一个有效的方法来使用一个函数?你是在问这一行是否有效?因为在一个函数中,只需要编写def string_listg:和函数体,返回后面跟那个表达式。下面有多个答案,有些评论甚至比我刚才在这里抛出的那句话更好。@Steven Rumbalski-我忽略了。谢谢你的指点。只是修复了它。这是可行的,但请注意规范是位置性的,而不是情境性的:每个内部列表都有格式:[name str,grade,grade,grade,…],其中名称是字符串,而成绩是浮动的。@Steven,对,谢谢。请查看我的最新更新。您使用i的目的是什么?对于学生中的项目,它是否可以工作?Streamlined:result=[parts[:1]+[floaty for y in parts[1:]对于项目中的部分。split',“对于学生中的项目]@ray toal只是一个有助于调试的习惯。”我没有受伤,但你是对的,这是多余的。你从哪里来?这是另一种方式。效率低下,但希望更能自我解释>>>项目结果=[]>>>项目结果。appendparts[0]将姓氏添加为列表的第一个元素>>>对于部分中的grage[1:::]:>>>项目结果。appendfloatgrade将等级添加到列表的末尾,因此本质上您使用3作为循环?是的,3个循环,但如果你面临复杂性问题,还有其他解决方案。有没有更简单的方法呢?@dg123我给了你两个解决方案一个是两行,第二个是详细的。我尽了最大的努力让你们了解这个程序是如何工作的,因为有很多解决方案,但你们应该首先了解它是如何工作的,这样你们就可以自己实现它了。如果您在理解我的代码时仍面临任何问题,请告诉我,我将添加更多解释:在第二个解决方案中,为什么要同时拆分和替换?
float_list=[]
for i in split_it:
    sub_list=[]
    for j in i[1:]:
        sub_list.append(float(j))

    float_list.append(i[:1]+sub_list)

print(float_list)
list_1=['Anna, 50, 90, 80', 'Bill, 60, 70', 'Cal, 98.5, 100, 95.5, 98']


split_it=[]  #storing new splited result here

for i in list_1:
    split_it.append(str(i).replace(",","").split())


float_list=[]
for i in split_it:
    sub_list=[]
    for j in i[1:]:
        sub_list.append(float(j))

    float_list.append(i[:1]+sub_list)

print(float_list)
[['Anna', 50.0, 90.0, 80.0], ['Bill', 60.0, 70.0], ['Cal', 98.5, 100.0, 95.5, 98.0]]