从数组中删除项目

时间:2014-07-30 09:14:16

标签: python list

我有一个像[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]

4 个答案:

答案 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

的列表

我必须说你的问题不明确。如果我的答案不是你想要的,请告诉我我错过了什么。