从两个同步列表中删除相同位置(索引)的项目?

edg*_*edg 2 python

我有两个清单:

l1 = ['#', '1', '#', '!']
l2 = ['S', 'T', 'K', 'M']
Run Code Online (Sandbox Code Playgroud)

如果在L1以"#"我想删除它,并消除任何是在L2相同的位置.这是我尝试过的(在其他几个方面):

for i in range(len(li[j])):
    for k in range(len(l2[n])):
        if j == "#":
            li.remove([j][i])
            l2.remove([n][k])
Run Code Online (Sandbox Code Playgroud)

但它抱怨j没有定义.我希望结果看起来像这样:

l1 = ['1', '!']
l2 = ['T', 'M']
Run Code Online (Sandbox Code Playgroud)

我很感激你的建议!

jam*_*lak 6

>>> l1 = ['#', '1', '#', '!']
>>> l2 = ['S', 'T', 'K', 'M']

>>> l1,l2 = zip(*((x,y) for x,y in zip(l1,l2) if x!='#'))
>>> l1
('1', '!')
>>> l2
('T', 'M')  
Run Code Online (Sandbox Code Playgroud)

运用 filter

>>> l1,l2 = zip(*filter(lambda x: '#' not in x,zip(l1,l2)))
>>> l1
('1', '!')
>>> l2
('T', 'M')
Run Code Online (Sandbox Code Playgroud)

运用 itertools

>>> from itertools import compress
>>> l1,l2 = zip(*compress(zip(l1,l2),(x!='#' for x in l1)))
>>> l1
('1', '!')
>>> l2
('T', 'M')
Run Code Online (Sandbox Code Playgroud)