2012-02-27 89 views
2

对不起,我很基本的问题,改变在列表值,但其实这是一个2部分的问题:Python入门:根据病情

  1. 给出一个列表,我需要更换的价值“? “ 'i'和'x'是一个整数,10.列表并不总是有相同数量的元素,所以我需要一个允许我这样做的循环。

    a = ['1', '7', '?', '8', '5', 'x'] 
    
  2. 如何获取值等于'?'的索引。这很好,如果这显示我如何能够获取列表中的所有索引和值。

+1

当你说“键和值”时,你真的指的是指数和值吗?键/值对与字典一起使用,而不是列表。 – 2012-02-27 18:22:08

+0

对不起,我的意思是索引。 – sudostack 2012-02-27 19:56:20

回答

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('?')

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

它被称为 '索引' 功能:

>>> a = ['1', '7', '?', '8', '5', 'x'] 
>>> a.index('?') 
2 
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 
2

只是因为没有人没有提到它,这是我最喜欢的非for循环成语像这样进行更换:

>>> 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()方法是非常有用的,并可扩展至比好如果/ elif链。