[英]Better way to find existence of arrays in list of arrays
我是Python的新手,正在尝试各种方法来优化和简化我的代码。
我有一个数组列表(必要时采用这种格式),最初是空的,需要使用数组进行更新,以确保不添加重复的条目。
现在,我正在按照以下方式进行操作,这是我尝试过的唯一可行的方法:
if len(where(((array(self.pop_next)-(self.pop[self.top_indv_indx[i]]))==0).sum(1)==len((self.pop[self.top_indv_indx[i]])))[0])<=0):
self.pop_next.append(self.pop[self.top_indv_indx[i]])
其中self.pop_next
是我的数组列表,而self.pop[self.top_indv_indx[i]]
是要添加的数组。
我知道这个Unpythonic,并且猜想有更好的简单方法可以做到这一点。 请帮忙
编辑:我从您的评论中看到您正在使用numpy数组。 我从未使用过numpy,所以不知道它们如何与集合一起使用。
一种选择是使用set
。 集就像列表一样,但是它们是无序的,并且只允许每个项目添加一次:
>>> s = set()
>>> s.add(1)
>>> s.add(2)
>>> s.add(2)
>>> s.add(2)
>>> s
set([1, 2])
但是,如果尝试将list
添加到集合中,则会遇到问题:
>>> s.add(['my','list'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
项必须是可哈希的才能添加到set
,并且list
不能哈希,因为它不能具有不变的哈希值,因为可以随时通过添加或删除值对其进行修改。
如果您不需要检查列表是否可变,则可以将其转换为固定的,可哈希的和易于设置的元组:
>>> mylist = ['my','list']
>>> s = set()
>>> s.add(tuple(mylist))
>>> s.add(tuple(mylist))
>>> s
set([('my', 'list')])
您可能要尝试使用numpy.all(array1 == array2)
作为单个数组比较的条件。
编辑扩展名:
要遍历列表,可以使用以下命令:
if all((numpy.all(array_to_add != a) for a in array_list)):
array_list.append(array_to_add)
这array_list
按值将array_to_add
与array_to_add
的所有元素进行比较。 请注意,与numpy.all
相比,这里all
都是__builtin__.all
。 如果您以前from numpy import *
过,则此操作将无效。 改用import numpy
并按上例中的全名调用函数。
如果可以按对象进行比较(例如,两个数组仅在内存中是完全相同的对象时才是相同的),请使用以下更简单的变体:
if array_to_add is not in array_list:
array_list.append(array_to_add)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.