学习Python:根据条件更改列表中的值

时间:2012-02-27 18:17:59

标签: python

对于这个非常基本的问题感到抱歉,但这实际上是一个由两部分组成的问题:

  1. 鉴于列表,我需要替换'?'的值使用'i'和'x'和一个整数,10。列表并不总是具有相同数量的元素,所以我需要一个允许我这样做的循环。

    a = ['1', '7', '?', '8', '5', 'x']
    
  2. 如何获取值等于'?'的索引。如果这能告诉我如何抓住列表中的所有索引和值,那就太好了。

7 个答案:

答案 0 :(得分:3)

为它编写一个函数,并使用map()在每个元素上调用它:

def _replaceitem(x):
    if x == '?':
        return 'i'
    elif x == 'x':
       return 10
    else:
        return x

a = map(_replaceitem, a)

请注意,这会创建一个新列表。如果列表太大或您出于其他原因而不想要此列表,则可以使用for i in xrange(len(a)):然后根据需要更新a[i]

要从列表中获取(index, value)对,请使用enumerate(a)返回一个产生此类对的迭代器。

要获取列表包含给定值的第一个索引,请使用a.index('?')

答案 1 :(得分:3)

1:

for i in range(len(a)):
    if a[i] == '?':
        a[i] = 'i'
    elif a[i] == 'x':
        a[i] = 10

对于2,你是什么意思“关键”?如果你的意思是索引:

index = a.index('?')

答案 2 :(得分:3)

首先阅读Built-in Types section of the Library Reference。我认为您正在寻找list.index

答案 3 :(得分:2)

这是一个名为'index'的函数:

>>> a = ['1', '7', '?', '8', '5', 'x']
>>> a.index('?')
2

答案 4 :(得分:2)

只是因为还没有人提到它,这是我最喜欢的非循环习语,用于执行这样的替换:

>>> a = ['1', '7', '?', '8', '5', 'x']
>>> reps = {'?': 'i', 'x': 10}
>>> b = [reps.get(x,x) for x in a]
>>> b
['1', '7', 'i', '8', '5', 10]

.get()方法非常有用,并且比if / elif链更好地扩展。

答案 5 :(得分:1)

a = ['1', '7', '?', '8', '5', 'x']
for index, item in enumerate(a):
    if item == "?":
       a[index] = "i"
    elif item == "x":
       a[index = 10

print a

答案 6 :(得分:0)

您现在可以使用lambda

# replace occurrences of ?
a = map(lambda x: i if x == '?' else x, a)
# replace occurrences of x
a = list(map(lambda x: 10 if x == 'x' else x, a))