我有两个列表:
PB = ['1','2','3', '10']
LB = ['12', '5', '21']
我想从列表中删除所有带有“ 1”的内容。我可以一次删除一项:
for notAWinner in [PB, LB]:
notAWinner.remove('1')
删除不适用于多个参数。如何用一个命令删除1、10、12和21?
答案 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)
如果您可以更新PB
和LB
来引用新列表,则可以使用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()]