我的首发列表(“{tag}”为[Ann]
且nn
为2位整数):
myList ['[A01]apple', '[A02]apple_sauce', '[A03]apple_juice', '[A04]banana', '[A05]banana_bread', '[A06]banana_ice']
我的目标列表:
myTgtList ['[A02]apple_sauce', '[A03]apple_juice', '[A05]banana_bread', '[A06]banana_icecream']
我的目标:
[Ann]text
时才移除[A(nn + 2)]text
我的尝试:
>>> for val in myList:
... if ('[A' + str((int(val[2:4]) + 2)) + ']') in val:
... print val
...
>>> for val in myList:
... if ('[A' + str((int(val[2:4]) + 2)) + ']') in myList:
... print val
...
>>> for val in myList:
... if ('[A' + str((int(val[2:4]) + 2)) + ']') in enumerate(myList):
... print val
...
>>> newList = [s for s in myList if ('[A' + str((int(val[2:4]) + 2)) + ']') in myList]
>>> newList
[]
>>> newList = [s for s in myList if ('[A' + str((int(val[2:4]) + 2)) + ']')]
>>> newList
[]
我意识到它可能类似于删除重复,但我无法在任何尝试中匹配条件。
提前感谢所有人。
答案 0 :(得分:1)
问题在于代码的这一部分:
str((int(val[2:4]) + 2))
观察:
>>> x="A02"
>>> x[1:3]
'02'
>>> int(x[1:3])
2
>>> str(int(x[1:3]))
'2'
>>> 'A'+str(int(x[1:3]))
'A2'
这意味着您的代码永远不会匹配,因为A2
不在任何代码中,只有A02
。
You can use any number of ways to correctly pad the string with zeros to the required widths.
例如:
>>> 'A%02d'%(int(x[1:3]))
'A02'
>>> 'A{0:02d}'.format(int(x[1:3]))
'A02'
这是一个有效的例子:
>>> l = ['[A01]apple', '[A02]apple_sauce', '[A03]apple_juice', '[B01]banana', '[A02]banana_bread', '[A03]banana_ice']
>>> [s for s in l if 'A%02d'%(int(s[2:4]) + 2) not in [t[1:4] for t in l]]
['[A02]apple_sauce', '[A03]apple_juice', '[A02]banana_bread', '[A03]banana_ice']
通常我会在语法百分比上使用String.format
,但列表理解已经很长了。