[英]Python - Remove “tagged” item from list only if another item with greater “tag” exists
我的起始列表(带有“标记”项的[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']
我的目标 :
[A(nn + 2)]text
时,才删除[Ann]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
[]
我意识到这可能类似于删除重复项,但是我在任何尝试中都无法满足条件。
在此先感谢所有人。
问题出在代码的这一部分:
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
不在。
例如:
>>> '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
,但是列表理解已经变得很长了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.