在python中制作一个压缩列表


from random import seed
from random import randint
print("How long list 1 do you want:")
long1 = int(input())
print("How long list 2 do you want:")
long2 = int(input())
print("in range 1-100","Generating 2 random list...", sep="n")
list1 = [randint(1,100) for i in range(long1)]
list2 = [randint(1,100) for i in range(long2)]
print("List 1:",list1,"List 2:",list2, sep = "n")
list = list1 + list2
unique=[]
for num in list:
if num not in unique:
unique.append(num)
print(f"Get unique number({len(unique)}) :", unique, sep="n") 

以上是完整的代码,我已经定义了唯一的,但我想让循环更简单

for num in list:
if num not in unique:
unique.append(num)

我尝试了一下,并制作了这样的代码:

unique=[num for num in list if num not in unique]

但它给了我一个错误信息

Traceback(最近调用last(:文件&";,第21行,in文件"&";,第21行,在name中错误:name未定义"唯一">

您不能使用列表理解来创建要用作引用的列表。在扩展代码中,在进入循环之前设置unique = [],因此存在唯一,并且可以在循环中向其添加值。你不能在列表理解中做到这一点。在理解临时列表时,您无法访问该列表。(哈……我想我只是编了那种语言。:(

如果想要一组唯一的列表项,可以使用另一个称为set的本机构造。它为您提供了一组独特的列表项,但它们几乎肯定会被重新排序。类似这样的东西:

list3 = list(set(list1 + list2))

list1 + list2将这两个列表组合在一起,保留了确切的顺序。set()使项目具有唯一性(即删除重复项(,但它会丢失原始排序。你必须做一些更聪明的事情来保持原来的秩序。

此外,您不应该使用名为list的变量,因为它是Python本机类型,如inttuple等。

最新更新