我有一个像[0 0 0],[3 3 3],[255 255 255](数字是RGB值)的数组,我想删除所有具有值[0 0 0的项目] ]结果 - > [3 3 3],[5 5 5]。为了实现我的不同算法首先,我必须使我的数组成为一个列表(使用.tolist方法),它返回一个类似的列表:“[0,0,0]”,“[3,3,3 ]“,”[255,255,255]“。 所以第一个问题:[0 0 0]和“[0,0,0]”之间有什么区别吗?
此外,我使用了许多主题中提出的不同算法,例如:
for n,i in enumerate(mylist)
if 0 in i: mylist[n].remove(0)
或
def clear_list_from_item(mylist, item):
try:
while True: mylist.remove(item)
except ValueError:
return mylist
mylist = [clear_list_from_item(x, 0) for x in mylist]
他们都没有回复结果。所以我的第二个问题:为什么?是因为我的列表,因为当我应用它时,让我们在列表中说如a = [[3,4],[5],[6,7,8]]所有这些都很有效
更新:1)嵌套级别:269x562(即我正在使用的pic的heightxwidth,因此我得到每个像素的列表) 2)我在.tolist()方法
之前的数组第一行的18个值的初始数组[[ 0 0 0]
[255 255 255]
[255 255 255]
[255 255 255]
[255 255 255]
[250 250 250]
[255 255 255]
[255 255 255]
[255 255 255]
[255 255 255]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
答案 0 :(得分:2)
mylist = filter(lambda rgb: any(rgb), mylist)
修改强>
它可能会更好:
mylist = filter(any, mylist)
答案 1 :(得分:2)
我们假设您有以下来源列表:
>>> my_nested_list = [[0, 0, 0], [3, 3 ,3], [255, 255, 555]]
有几种方法可以删除包含所有零的条目。一个很好的方法是使用列表推导,它将创建一个仅包含所需值的新列表:
>>> my_new_list = [sublist for sublist in my_nested_list if sublist != [0, 0, 0]]
>>> my_new_list
[[3, 3 ,3], [255, 255, 555]]
请注意,使用此方法时,如果以后需要对其进行更多处理,则不要进行变异(修改初始列表),这可能很方便,此方法的缺点是最终会占用更多内存(因为您和# 39;重新创建一个新列表。)
如果你真的想修改你的源列表,有几种方法可以做到,其中一种方法包括使用del
:
def delete_stuff_in_my_list(m_list, pattern=[0, 0, 0]):
for index, value in enumerate(m_list):
if value == pattern:
del m_list[index]
在这种情况下:
>>> delete_stuff_in_my_list(my_nested_list)
>>> my_nested_list
[[3, 3, 3], [255, 255, 255]]
BTW对可用的不同删除选项here
进行了很好的解释答案 2 :(得分:0)
你应该用:
修改你的第一个功能mylist = [[0, 0, 0],[3, 3, 3],[255, 255, 255]]
for n,i in enumerate(mylist):
if i == [0,0,0]:
mylist.pop(n) # pop remove object at position n in-place
# or with : mylist.remove(i)
注意,使用pop()或remove()将在列表的索引中创建一个pb,如果在i
之前打印if
,它将打印: [0, 0, 0],[255, 255, 255]
但不是[3, 3, 3]
所以你应该喜欢非就地的东西,如:
my_new_list = [i for i in mylist if i!=[0,0,0]]
或者如果您在开头有一个数组:
my_new_array = np.array([i for i in myarray if (i!=0).all()])
或
my_new_array = np.array([i for i in myarray if any(i)]) # but specific to remove array of 0s.
希望这有帮助
答案 3 :(得分:0)
[0 0 0]和" [0,0,0]"之间的差异? [0 0 0]在python中没有任何内容,除非你在零之间放一个逗号,在这种情况下它变成一个列表。 " [0,0,0]"是一个字符串。
t = [[0, 0, 0],[3, 3, 3],[255, 255, 255]]
[f for f in t if f != [0,0,0]]
将为您提供不是0,0,0
的列表我必须说你的问题不明确。如果我的答案不是你想要的,请告诉我我错过了什么。