如何解决比较和相乘列表中的元素
- 检查列表中的所有元素是否都不同
- 将列表中除零以外的所有元素相乘
但是我找不到一种方法来比较一个列表中的所有元素,你有什么主意吗?
谢谢!
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。