我有两个数组,如果一个元素存在于从客户机接收的数组中,那么它应该删除另一个数组中的匹配数组。当客户机阵列只有一个元素时,这种方法有效,但当它有多个元素时,这种方法无效。你知道吗
代码如下:
projects = ['xmas','easter','mayday','newyear','vacation']
for i in self.get_arguments('del[]'):
try:
if i in projects:
print 'PROJECTS', projects
print 'DEL', self.get_arguments('del[]')
projects.remove(i)
except ValueError:
pass
self.get_arguments('del[]')
,从客户端返回一个数组,格式如下:
[u'xmas , newyear, mayday']
所以它读作一个元素而不是三个元素,因为只有一个unicode存在。你知道吗
我怎样才能删除多个元素?你知道吗
编辑:我不得不把列表分成几个单独的元素。你知道吗
可以尝试一些超级Python式的东西,比如列表理解:
你必须写下你原来的项目,这不是最优雅的,但这应该工作。你知道吗
这不起作用的原因是
remove
只是删除了第一个匹配的元素。您可以通过反复调用remove
直到它不再存在来解决这个问题,例如,将您的if
更改为while
,如下所示:但一般来说,使用
remove
是个坏主意,尤其是当您已经搜索了元素时。现在你只是重复搜索,以便删除它。除了明显的低效率之外,还有很多情况下,您最终会尝试删除i
的第三个实例(因为这就是您找到的实例),但实际上会删除第一个实例。这只会让你的代码更难推理。您只需在列表上迭代一次并在执行时删除,就可以提高复杂性和效率。你知道吗但即使这样也过于复杂,效率仍然很低,因为每次从列表中删除时,都会移动列表中的所有其他元素。使用
filter
或列表理解,从要保留的值构建一个新列表几乎总是更简单的:将
arguments
生成一个集合在这里并不是必要的,但它在概念上更清晰—您不关心参数的顺序,也不需要保留任何重复项,而且更有效的集合可以立即测试成员身份,而不是通过比较每个元素。你知道吗那
filter
呢?你知道吗相关问题 更多 >
编程相关推荐