seen = []
dups = collections.defaultdict(list)
for i, item in enumerate(prules)
for j, orig in enumerate(seen):
if item == orig:
dups[j].append(i)
break
else:
seen.append(item)
deleteindex = [val for key,val in dups.iteritems() if seen[key] == '159']
for i in range(o,len(deleteindex)):
n = deleteindex[i]
del rulelines[n]
以上是我的代码。
我想做的是创建一个数组deleteindex
它接受任何项目的索引159
in.
它确实获得了我想要的所有值,即具有该值的所有索引159
但是当我尝试使用索引从不同的数组中删除值时,它返回错误
列表索引必须是整数,而不是列表。
prules
是我想要获取索引值的数组,其中包含数字字符串
rulelines
包含是一个字符串列表,我想使用从中获取的值prules
并使用这些值作为索引来删除这些值rulelines
我哪里出错了?
我猜它在
deleteindex = [val for key,val in dups.iteritems() if seen[key] == '159']
你是对的。
该错误是因为,在
deleteindex = [val for key,val in dups.iteritems() if seen[key] == '159']
key
is a list
. As dups
is defaultdict(list)
,该值将始终是list
.
这可以通过以下方式验证:
...
print dict(dups.iteritems()) # adding this
deleteindex = [val for key,val in dups.iteritems() if seen[key] == '159']
...
至于你的算法,试试这个,一个更容易理解的版本。
import random
prules = [random.randint(150,156) for i in range(30)]
def get_indexes(li):
retval = {}
for i, x in enumerate(li):
if x not in retval:
retval[x] = []
retval[x].append(i)
return retval
dups = get_indexes(prules)
indexes = dups.get('156',[])
rulelines = [rulelines[i] for i in range(len(rulelines[:])) if i not in indexes]
要获取索引,只需执行以下操作:
dups.get('156',[])
如果以下情况将返回索引列表dups['156']
存在,否则返回一个空列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)