如何删除一个列表的 None 值和另一个列表的等效值?

How can I remove None values of one list and the equivalent values from another?

我已经尝试解决这个问题一段时间了。我想要做的是从列表中删除 None 值,例如:

list1 = [2,3,4,None,2,4,5]

我还有其他列表,这些列表具有与 list1 值相关的值(假设 list1 是天数,另外两个是这些列表中发生的事情):

list1 = [2,3,4,None,2,4,5]

list2 = ['red','blue','white','red','blue','blue','blue']

我想从另一个列表中删除 None 值以及 red。所以我希望它们看起来像:

list1 = [2,3,4,2,4,5]

list2 = ['red','blue','white','blue','blue','blue']

我试过的是:

    for j in array_length(list1):
        
        if list1[j] is None: #if value is None
            print("Missing values. Omitting day.")
            del list1[j] #deleting that day from all datasets
            del list2[j]
            

其中 array_length 是我创建的一个函数,用于为我提供一个从 0 到我的目标列表长度的数组。上面的代码不起作用,因为它给了我以下错误:

IndexError: list index out of range

我认为发生的事情是索引没有正确更新,但我不知道如何解决或绕过它。

问题是因为您在循环时从列表中删除了项目。所以当你开始循环时,列表​​的长度是 7,但是因为你在中间删除了一个项目,所以循环在最后阶段超出了索引。 教训:循环使用时不要从列表中删除。

但这里有一种方法可以做到这一点而不会导致错误

list1 = [2,3,4,None,2,4,5]
list2 = ['red','blue','white','red','blue','blue','blue']
for i, val in enumerate(list1):
  if val is None:
    del list1[i]
    del list2[i]

您可以尝试 zipall

list1 = (2,3,4,None,2,4,5)

list2 = ('red','blue','white','red','blue','blue','blue')

l = [i for i in zip(list1, list2) if all(i)]

l1 = [i[0] for i in l]
l2 = [i[1] for i in l]

print(l1, l2)
[2, 3, 4, 2, 4, 5] 
['red', 'blue', 'white', 'blue', 'blue', 'blue']