比较和相乘列表中的元素

问题描述

我正在尝试在算法中编写一个函数,该函数

  • 检查列表中的所有元素是否都不同
  • 将列表中除零以外的所有元素相乘

但是我找不到一种方法来比较一个列表中的所有元素,你有什么主意吗?

谢谢!

PS:我使用arr = np.random.randint(10,size=a)创建一个随机列表

编辑:

更准确地说,我正在尝试检查numpy数组中的所有元素是否相同或不同(如果它们不同)是否返回True。 同样,一旦完成,就将数组中除零以外的所有元素相乘 例如: 如果我有一个数组[4,2,6,8,9,0],由于所有元素都不相同,该算法告诉返回的True首先是我,然后将它们乘以4*2*6*8*9,除了0

解决方法

您可以使用numpy.unique

以下代码段检查数组中的所有元素是否唯一(彼此不同),如果是,则将非零值乘以因子factor

import numpy as np

factor = 5

if np.unique(arr).size == arr.size:
    arr[arr != 0] = arr[arr != 0] * factor
,

要检查列表中的所有元素是否都不同,可以将列表转换为集合,以删除重复项,并将集合的长度与原始列表进行比较。如果集合的长度与列表的长度不同,则存在重复项。

x = np.random.randint(10,size=10)
len(set(x)) == len(x)

要将除0以外的所有值相乘,您可以执行列表解析以删除0,然后使用np.prod乘以新列表中的值。

np.prod([i for i in x if i != 0])

示例:

x = np.random.randint(10,size=10)
if len(set(x)) == len(x):
    print(np.prod([i for i in x if i != 0]))
else:
    print("array is not unique")
,

您可以使用收藏夹来查找唯一编号。我提供了可以解决您问题的代码。

import numpy as np
from collections import Counter


a = 5
arr = np.random.randint(10,size=a)


result = 1 #Variable that will store the product
flag = 0 #The counter

#Check if all the numbers are unique
for i in Counter(arr):
    if Counter(arr)[i] > 1:
        flag = 1
        break

#Convert the dictionary into a list
l = [i for i in Counter(arr)]

#Return the product of all the numbers in the list except 0
if flag == 0:
    for i in l:
        if i != 0:
            result = result * i
else:
    print("The numbers are not unique")

,

只是为了好玩,这是单线:

arr = np.array([1,2,3,4,0])

np.prod(arr[arr!=0]) if np.unique(arr).size == arr.size else False

>>> 24

如果数组为[1,4],则结果为False

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...