Python:按索引弹出列表列表中的项目
问题描述:
我必须删除行列表中项目的索引,其中lines[0]
的项目不在标题中。Python:按索引弹出列表列表中的项目
输入如下:
headers = ['internal_id', 'default_code', 'ean13', 'supplier_id', 'product_qty']
lines = [['default_code', 'fld_code', 'test'],[1212, 4545, 'test1'],[45, 787, 'test2']]
预期输出如下:
lines = [['default_code'],[1212],[45]]
我已经试过到目前为止做的是在这里:
for x in lines[0]:
if x not in headers:
for line in lines[0]:
line.pop(line.index(x))
print lines
这尚未产生所需的产出。请帮助。
答
使用列表理解(您也可以使用filter)。
lines = [line for line in lines if line[0] in headers]
输出:
[['default_code', 'fld_code']]
如果你想要的是一个 “手动” 循环使用list.remove
:
for x in lines:
if x[0] not in headers:
lines.remove(x)
+0
@我需要删除线条[0]中的缺失项目以及标题中的所有列表,以及线条[0]的缺失项目索引的相同索引中的所有列表。 – Jothimani
答
,如果你想使用弹出,你必须使用索引,然后没有问题的话,最好从头开始。
for x in range(len(lines)-1,-1,-1):
if lines[x][0] not in headers:
lines.pop(x)
print lines
我不知道你的项目是什么,但你应该考虑使用一个词典。
答
这是你想写:)
for x in lines[0]:
if x not in headers:
n = lines[0].index(x)
for line in lines:
line.remove(line[n])
print lines
你是那种亲密的代码。如果你想在某个位置“删除”一个元素,你不想使用pop。有更优雅和更短的解决方案,但这个适合你的编码风格。看看Python中的列表理解,它非常强大。
答
for line in lines[0]:
line.pop(line.index(x))
我希望在循环线是持有的字符串类型的值。我们不能在字符串中使用pop。纠正我,如果我错了。
既然你改正了语言凯文Cruijssen,我不明白...对我来说“预期的输出”是不兼容的解释“我必须删除行列表中的项目由行项目索引[0]不在标题中“ – Vince