1
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
4

3 回答 3

1

永远不要改变传递给你的参数。

temp = []
 ...
  temp.append('hot')
   ...
  temp.append('cool')
于 2013-07-06T23:09:31.130 回答
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']
于 2013-07-06T23:11:09.997 回答
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.

于 2013-07-06T23:44:55.607 回答