要么这是一个错误,要么我要学习一些关于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