-1

在 python 中,我想从列表中删除一项,然后将该列表合并到一个新列表中。我可以将方法链接起来,这样就可以在一行中发生吗?

例如:

a = [1,2,3,4]
# I want to remove 3 and add [10,11]
a.remove(3) #it doesn't return a, so I can't do this in one line
a += [10,11]
4

4 回答 4

11

使用列表理解和连接:

a = [i for i in a if i != 3] + [10, 11]

这将删除列表中的多个副本3。如果即使有多个副本也只想删除第一次出现的,则需要坚持切片:3

a = a[:a.index(3)] + a[a.index(3) + 1:] + [10, 11]

但这会导致对该索引的两次搜索。由于您在评论中提到您的数据中没有重复,因此您应该坚持第一个选项。

于 2013-07-16T14:11:46.337 回答
1

你可以这样使用,

>>>print filter(lambda x: x is not 3, [1,2,3,4]) + [10,11]
[1, 2, 4, 10, 11]
于 2013-07-16T14:22:08.030 回答
0

替代:

a = [1,2,3,4]
new = (lambda b=iter(a): list(iter(b.next, 3)) + list(b) + [10, 11])()
# [1, 2, 4, 10, 11]

这很丑 - 但删除了索引查找

于 2013-07-16T14:23:08.153 回答
0

您可以在没有要删除的位置的情况下拆分数组,然后连接尾部:

a = [1,2,3,4]
a = a[:2]+a[3:]+[10,11]

因此,您可以在一行中删除一个位置。

于 2013-07-16T14:17:32.073 回答