返回列表中最大值和最小值之间的数字乘积,并简化循环

时间:2018-07-30 17:56:59

标签: python

我有一些用空格隔开的数组元素, 例如:-7 5 -1 3 93 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

看起来有点麻烦,而且我有类似的问题,是否有任何方法可以简化该循环。预先感谢您的关注。

3 个答案:

答案 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)

我创建了一个生成器,该生成器接受一个参数,一个可迭代的变量,并产生此可迭代对象的minmax范围内的值。乘积按常规计算:

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