Python:使用for循环将int列表修改为strs列表

时间:2013-07-06 23:07:51

标签: python list for-loop

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

3 个答案:

答案 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