0

当我在理解中进行操作时,您如何检查一个元素是否已经在列表中?

例如,在下面的理解中说我想限制重复的数字虽然我根本不是在寻找唯一的数字,但我想通过 if 条件来防止。

[x for x in [1,2,3,1,2,3]]

我正在寻找类似的东西

[x for x in [1,2,3,1,2,3] if not in self]
4

3 回答 3

1

我认为您正在寻找的是集合理解转换为 list。它会做你想做的事,没有任何奇怪的语法。

ans = list({x for x in [1,2,3,1,2,3])})

实际上也可以简化为

ans = list(set([1,2,3,1,2,3]))

但我认为第一个在性能上可能会更好。

于 2013-07-23T16:14:31.770 回答
0

您在创建它时无法访问理解(据我所知;如果我错了,请有人纠正我!),但在您的情况下,您可以只使用 a set,它可以消除重复项。

uniques = set([1, 2, 3, 1, 2, 3])
print(uniques) # >>> set([1, 2, 3])

如果您的列表推导需要更复杂,您可以从集合中索引推导,而不是原始列表。

mylist = [1, 2, 3, 1, 2, 3]
print([x*x for x in set(mylist)]) # >>> [1, 4, 9]

如果您确实需要在创建期间直接访问列表,则需要使用显式循环而不是推导式。

于 2013-07-23T15:13:23.617 回答
0
x = [1,2,3,1,2,3]
y = [x[n] for n in range(len(x)) if x.index(x[n]) == n]

?

我认为在这一点上,简单地使用 for 循环而不是理解来编写它可能更具可读性。

于 2013-07-23T15:26:56.753 回答