正如其他用户所解释的,您仅将每个元素与列表中的第一个元素进行比较,因此如果第一个元素是唯一的,那么您的代码将无法正常工作。
我解决这个问题的方法是创建一个新列表,几乎等于原来的列表,但改变如下:
original=[3,3,4,3,3]
new=[3,4,3,3,3]
因此,如果您计算“原始-新”,您会得到一个列表,其中几乎所有数字都等于 0,除非唯一数字在两个列表中。
您可以按如下方式创建新列表:
new=original[1:] #all elements, except the first
new.append(original[0]) #appends the first element in the original to the last position
compare=[original[i]-new[i] for i in range(len(original))]
比较=[0,-1,1,0,0]
你可以得到索引:
indexes=[i for i in range len(original) if original[i]-new[i]!=0]
索引=[1,2]
当我将原始列表向左移动时,唯一编号的索引是最后一个。
所以,唯一编号是:
unique=original[indexes[-1]]
我测试的完整代码:
#Creates a random list with a unique number in a random position
n=1000000
a=[random.uniform(0,1)]*n
pos=round(random.uniform(0,n-1))
a[pos]=random.uniform(0,1)
#Creates the new list to compare
b=a[1:]
b.append(a[0])
#Finds the unique number
unique=a[[i for i in range(len(a)) if a[i]-b[i]!=0][-1]]
如果你使用 Numpy,你可以获得 3.5 倍的代码:
array_a=np.array(a)
array_b=array_a[1:]
array_b=np.append(array_b,array_a[-1])
compare=array_a-array_b
unique=array_a[compare!=0][-1]
您好。