def temperature(weather):
'''(list of ints) -> list of strs
Modify and return list, replacing each temp in list for weather condition.
Hot being over 25 degrees, and cool being under.
'''
所以,如果我运行温度([24,29,11]),我希望它返回['cool','hot','cool']。
这就是我得到的。我想我正在创建一个新列表,而不是修改它。如何修改列表而不是使用for循环创建新列表?
temp =[]
for degrees in weather:
if degrees > 25:
temp = temp + ['hot']
else:
temp = temp + ['cool']
return temp
答案 0 :(得分:1)
永远不要改变传递给你的参数。
temp = []
...
temp.append('hot')
...
temp.append('cool')
答案 1 :(得分:1)
使用带有三元表达式的列表推导:
>>> lis = [24, 29, 11]
>>> def func(lis):
... return ['hot' if x > 25 else 'cool' for x in lis]
...
>>> func(lis)
['cool', 'hot', 'cool']
修改相同的列表:
>>> lis = [24, 29, 11]
>>> id(lis)
3055229708L
>>> lis[:] = ['hot' if x > 25 else 'cool' for x in lis]
>>> id(lis)
3055229708L
基于简单循环的解决方案:
>>> temp = []
for x in lis:
if x > 25:
temp.append('hot')
else:
temp.append('cool')
>>> temp
['cool', 'hot', 'cool']
答案 2 :(得分:1)
修改输入列表通常是一个坏主意,如果你真的想这样做,使用enumerate
来获取索引和元素访问符号来改变列表内容:
for index, degrees in enumerate(weather):
if degrees > 25:
weather[index] = 'hot'
else:
weather[index] = 'cold'
如果您制作新列表,请不要说
temp = temp + [whatever]
这会创建temp
的副本以附加新项目,并可将性能降低到二次时间。相反,使用
temp += [whatever]
或
temp.append(whatever)
这两个修改temp
。