在 python 列表中只选择一次偶数而不重复相同的数字

selecting out even number only once without repeating the same number in python list

list1 = [2,4,6,8,3,4,2,] 从上面的列表中,我需要获得以下结果 [2,4,6,8]

这是我试过的方法。但是结果报错,没有给出预期的结果。

list1 = [2,4,6,8,3,4,2,]
x=[]
for num in list1:
    if (num % 2 == 0) and (num not in list1):
        x.append(num)
        print(x)

所以我需要你的帮助来只选择一次偶数而不重复相同的数字 提前致谢...!

您可以将 x 中的数字存储为 set 数据类型,以防止重复,而不是列表

list1 = [2,4,6,8,3,4,2]
x=set()
for num in list1:
    if (num % 2 == 0):
      x.add(num)

print(list(x))

或者,如果您想遵守输入的顺序,您可以有 1 个集合和 1 个列表。集合(x_set)用于高效检查列表中是否已经存在一个数字,列表(x_output)用于存储输出

list1 = [2,4,6,8,3,4,2]
x_set=set()
x_output = []
for num in list1:
    if (num % 2 == 0) and (num not in x_set):
      x_set.add(num)
      x_output.append(num)

print(x_output)

我对您的代码进行了细微修改,只需应用 set() 即可仅获取唯一值,应用 list() 将其转换为列表,应用 sorted() 即可按升序获取值

list1 = [2,4,6,8,3,4,2,1]
x=[]
for num in list1:
    if (num % 2 == 0):
        x.append(num)
print(sorted(list(set(x))))

输出

[2, 4, 6, 8]

编辑:如果您需要结果以与原始列表相同的顺序出现,则需要指定第二个条件(num not in x),而无需再使用set()

list1 = [4,2,8,3,6,5]
x=[]
for num in list1:
    if (num % 2 == 0) and (num not in x):
        x.append(num)

print(sorted(list(set(x))))
print(list(set(x)))
print(set(x))
print(x)    #this is the output you're looking for

输出

[2, 4, 6, 8]
[8, 2, 4, 6]
{8, 2, 4, 6}
[4, 2, 8, 6]

有了列表理解,一行就够了。首先遍历列表并测试偶数。然后在集合中转换以消除重复项。 return 后列出:

list({x for x in list1 if x % 2 <= 0})

输出:[8、2、4、6]

注释清楚后,再来个代码即可:

[list1[x] for x in [0] if list1[x] % 2 <= 0] + [list1[i] for i in range(len(list1)) if list1[i] % 2 <= 0 and list1[i] not in list1[0: i - 1]]

输出:[2、4、6、8]

如果你想继续相同的逻辑,你可以更新if条件:

list1 = [2,4,6,8,3,4,2,]
x=[]
for num in list1:
    if (num % 2 == 0) and (num not in x):
        x.append(num)
        print(x)

其他解决方案可以使用 list comprehensionset:

list1 = [2,4,6,8,3,4,2,]
l_set = set(list1)
nums = [val for val in l_set if val%2 == 0]
print(nums)