Ошибка в функции Python str.rstrip () или моя собственная глупость?

Либо это ошибка, либо я собираюсь узнать что-то новое о том, как себя ведет Python. :)

У меня есть словарь, заполненный парами ключ / значение. Каждый ключ имеет уникальный префикс ias_XX_XX_ . Я пытаюсь получить список всех уникальных префиксов в словаре.

  1. Сначала я получаю список всех ключей, которые заканчиваются на '_ x1' .
  2. Затем я удаляю '_x1' из всех, использующих rstrip ('_ x1' ).

Это отлично работает для всех из них, кроме последнего, ias_1_1_x1 . Вместо разделения на ias_1_1 он становится ias_ . Запустите код, чтобы убедиться в этом сами:

d = {
'ias_16_10_x2':     575, 
'ias_16_10_x1':     0, 
'ias_16_10_y1':     0, 
'ias_16_10_y2':     359,
'ias_16_9_x2':      575, 
'ias_16_9_x1':      0, 
'ias_16_9_y1':      18, 
'ias_16_9_y2':      341, 
'ias_1_1_y1':       0, 
'ias_1_1_y2':       359,  
'ias_1_1_x2':       467, 
'ias_1_1_x1':       108,
}

x1_key_matches = [key for key in d if '_x1' in key]
print x1_key_matches

unique_ids = []
for x1_field in x1_key_matches:
    unique_ids.append(x1_field.rstrip('_x1'))

print unique_ids

Фактический результат : (Python 2.6, 2.7 и 3.2 (для работы 3.x необходимо изменить print на print ()))

['ias_16_10_x1', 'ias_16_9_x1', 'ias_1_1_x1']
['ias_16_10', 'ias_16_9', 'ias']   # <<<--- Why isn't this last one ias_1_1???

Ожидаемый результат:

['ias_16_10_x1', 'ias_16_9_x1', 'ias_1_1_x1']
['ias_16_10', 'ias_16_9', 'ias_1_1']

Если я изменю имя ключа с ias_1_1 на что-то вроде ias_1_2 или ias_1_3 , сбоя не произойдет. Почему это происходит?

8
задан Dave Gallagher 25 June 2011 в 07:17
поделиться