2012-02-27 3 views
2

Извините за очень основной вопрос, но это на самом деле 2 части вопрос:Learning Python: Изменение значения в списке на основе состояния

  1. Учитывая список, мне нужно заменить значение? ' с 'i' и 'x' с целым числом, 10. Список не всегда имеет одинаковое количество элементов, поэтому мне нужен цикл, который позволяет мне это делать.

    a = ['1', '7', '?', '8', '5', 'x'] 
    
  2. Как захватить индекс, где значение равно «?». Было бы неплохо, если бы это показало мне, как я мог бы захватить все индексы и значения в списке.

+1

Когда вы говорите «ключи и значения», вы на самом деле имеете в виду индексы и ценности? Пара ключей/значений используется с dicts, а не списками. –

+0

Извините, я имел в виду индекс. – sudostack

ответ

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

только потому, что никто не упомянул об этом еще, вот мой любимый, не для цикла идиома для выполнения замены, как это:

>>> 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 цепь.

Смежные вопросы