我有一些用空格隔开的数组元素,
例如:-7 5 -1 3 9
,3 14 -9 4 -5 1 -12 4
,-5 1 2 3 4 5 6 7 8 -3
。
任务是找到位于最大值和最小值之间的数字的乘积。我做了些计算
n = "-7 5 -1 3 9"
t = [int(i) for i in n.split()] # transform to list
if t.index(max(t)) < t.index(min(t)): # loop to cut numbers which are not
for i in range(len(t)): # between our max and min numberes in list
if t.index(max(t)) > i:
t.pop(i)
for i in range(len(t)):
if t.index(min(t)) < i:
t.pop(i)
elif t.index(min(t)) < t.index(max(t)):
for i in range(len(t)):
if t.index(min(t)) > i:
t.pop(i)
for i in range(len(t)):
if t.index(max(t)) < i:
t.pop(i)
t.pop(t.index(min(t)))
t.pop(t.index(max(t)))
def product(list): # fuction to return product of a list
p = 1
for i in list:
p *= i
return p
print(product(t)) # and print it
看起来有点麻烦,而且我有类似的问题,是否有任何方法可以简化该循环。预先感谢您的关注。
答案 0 :(得分:2)
如果您愿意使用NumPy,则可以用两行代码来解决问题:
import numpy as np
n="-5 1 2 3 4 5 6 7 8 -3"
t = [int(i) for i in n.split()]
t = np.array(t) # Convert the list to a numpy array
t[t.argmin() : t.argmax() + 1].prod() # Get the range and the product
如果您有多个max元素,并且想扩展到最右边,则可以相应地修改代码:
t[t.argmin() : t.size - t[::-1].argmax()].prod()
答案 1 :(得分:0)
您可以尝试这样的事情
n = "-7 5 -1 3 9"
n_list = n.split(" ")
n_list = list(map(int, n_list)) #In case of python3 use -- n_list = map(int, n_list)
max = max(n_list)
min = min(n_list)
result = 1
for i in range(len(n_list)):
if n_list[i] > min and n_list[i] < max:
result = result * n_list[i]
print(result);
答案 2 :(得分:0)
我创建了一个生成器,该生成器接受一个参数,一个可迭代的变量,并产生此可迭代对象的min
和max
范围内的值。乘积按常规计算:
from itertools import chain
def values(iterable):
lst = list(int(i) for i in chain.from_iterable(i.split() for i in n))
_min, _max = min(lst), max(lst)
for i in lst:
if _min < i < _max:
yield i
n = ['7 5 -1 3 9', '3 14 -9 4 -5 1 -12 4', '-5 1 2 3 4 5 6 7 8 -3']
p = 1
for i in values(n):
p *= i
print(p)
输出:
-1234517760000