从多个列表中删除字符

时间:2018-10-29 00:25:59

标签: python

我有两个列表:

PB = ['1','2','3', '10']
LB = ['12', '5', '21']

我想从列表中删除所有带有“ 1”的内容。我可以一次删除一项:

for notAWinner in [PB, LB]:
    notAWinner.remove('1') 

删除不适用于多个参数。如何用一个命令删除1、10、12和21?

5 个答案:

答案 0 :(得分:2)

如果您正在寻找伪代码(y)解决方案。

results = []

for i in PB + LB:
  if '1' not in i:
    results.append(i)

print(results)

答案 1 :(得分:1)

使用此:

no_ones = [i for i in PB + LB if '1' not in i]

您可以将代码的PB + LB部分替换为所需的任何列表。 它将返回所有不带1的项目

print(no_ones)

这是一个函数,只需传入您想要的任何列表,它将返回不带1的列表

def remove_ones(l):
    return [i for i in l if '1' not in i]

答案 2 :(得分:1)

您可以dir=c("C:/") file=list.files(dir) file_cnt=length(file) for (i in 1:file_cnt) {assign(paste0("c", i), read.table(paste(dir, "/", file[i], sep=""), header=T, sep="", dec=".")) mypatterns=c[, i]$mypatterns ### HERE!!!!!! mypatterns=rbind(mypatterns, c(1,1,0))} c1[i]=ampute(c[i], prop=.2, patterns=mypatterns, freq=NULL, mech="MAR", weights=NULL, run=T)$amp } 清除不需要的物品:

filter

答案 3 :(得分:0)

如果您可以更新PBLB来引用新列表,则可以使用filter + lambda或list-comprehension轻松实现

PB = list(filter(lambda s: '1' not in s, PB))   #filter

LB = [s for s in LB if '1' not in s]  # List comprehension

但是,如果您需要在现有列表中就地删除它,这似乎有些棘手。一种方法是用切片语法替换现有列表的内容:

# similar to what you are doing in your question
for my_list in (PB, LB):
    # my_list  = [s for s in my_list if '1' not in s]  
    # The above will not affect the original PB and LB

    my_list[:] = [s for s in my_list if '1' not in s]
    # The above will replace the content of original PB and LB

答案 4 :(得分:0)

我可以做到两行最好:

PB = ['1','2','3', '10']
LB = ['12', '5', '21']
notAWinner = ['1', '10', '12', '21']

for ls in LB, PB:
    [i if i not in notAWinner else ls.remove(i) for i in ls.copy()]