要麼這是一個錯誤,要麼我要學習一些關於Python行爲的新東西。 :)Python的str.rstrip()函數中的錯誤,還是我自己的愚蠢?
我有一個字典填充鍵/值對。每個密鑰都有一個唯一的前綴,ias_XX_XX_
。我試圖獲得字典中每個唯一前綴的列表。
- 首先我得到一個以
'_x1'
結尾的所有鍵的列表。 - 接下來,我使用
rstrip('_x1'
從它們全部剝離'_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的工作))
['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
,故障不會發生。這是爲什麼發生?
回想起來,如果'rstrip'的參數是一個集合而不是一個列表,它可能會更加正確,而且更容易混淆。但是稍後會向Python添加集合。 –
您總是可以切掉最後三個字符:'如果key.endswith(「_ x1」)]'',鍵爲uids = [key [: - 3]。請注意'endswith'與您運行的測試不一樣。 – katrielalex