grade=['Ben Anderson',95,90,100,-1,'Mary Johnson',75,78,79,-5,'Michael Walter',80,68,0]
def convert_grades(lst):
a = []
b = []
for i in lst:
if isinstance(i,str):
c = 0
while lst[c] < 0 or lst[c] == []:
a = a + lst[c]
c = c + 1
b = b + a
return b
我希望它返回为
[['Ben Anderson',95,90,100],['Mary Johnson',75,78,79],['Michael Walter',80,68,0]]
但它返回为 []
不知道怎么回事。需要帮助。
请您参考如下方法:
输入输出形式相同的建议:
def convert_grades(lst):
out = []
for element in grade:
if isinstance(element, str):
buf = [] # re-initializes 'buf' everytime there is a string
out.append(buf)
buf.append(element)
return out
前代码非pythonicity的三个主要表现:
- 在已经熟悉 python 习语的人会使用类型方法的情况下使用算术运算符(在这种情况下为
list.append); - 在列表中输入,其中明显的数据类型应该是字典(尽管并不总是可以控制获取数据的方式);
- 而且,最严重的症状是输出是列表的列表,而实际上是在求字典。
因此,一种更 Pythonic 的方式,返回字典而不是列表:
def convert_grades(lst):
out = {}
for element in grade:
if isinstance(element, str):
key = element
out[key] = []
else:
out[key].append(element) ## mind that this would raise an error if first element in lst is not string
return out
print convert_grades(grade)
希望这对您有所帮助!
