Python: Для каждого списка элемент применяют функцию через список

body {background-image: url (" https://s3-us-west-2.amazonaws.com/s.cdpn.io/104215/launch-day-boom_copy.svg " ); минимальная высота: 100vh; / * Вы должны установить указанную высоту / background-position: center; / Центрирование изображения / повторение фона: без повтора; / Не повторять изображение / background-size: cover; / Изменить размер фонового изображения, чтобы охватить весь контейнер * / ##> Заголовок ##}

25
задан Ankur Ankan 28 December 2013 в 10:26
поделиться

7 ответов

Можно сделать это использование понимания списка и минута () (код Python 3.0):

>>> nums = [1,2,3,4,5]
>>> [(x,y) for x in nums for y in nums]
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5)]
>>> min(_, key=lambda pair: pair[0]/pair[1])
(1, 5)

Примечание, что для выполнения этого на Python 2.5 Вы должны будете или привести один из аргументов плавание или сделать from __future__ import division так, чтобы 1/5 правильно равнялся 0.2 вместо 0.

42
ответ дан Martijn 28 November 2019 в 18:27
поделиться

Если я корректен в размышлении, что Вы хотите найти минимальное значение функции для всех возможных пар 2 элементов из списка...

l = [1,2,3,4,5]

def f(i,j):
   return i+j 

# Prints min value of f(i,j) along with i and j
print min( (f(i,j),i,j) for i in l for j in l)
10
ответ дан Triptych 28 November 2019 в 18:27
поделиться

Некоторый читаемый Python:

def JoeCalimar(l):
    masterList = []
    for i in l:
        for j in l:
            masterList.append(1.*i/j)
    pos = masterList.index(min(masterList))
    a = pos/len(masterList)
    b = pos%len(masterList)
    return (l[a],l[b])

Сообщенный мне, если что-то не ясно.

3
ответ дан Andrea Ambu 28 November 2019 в 18:27
поделиться

Если Вы не возражаете импортировать numpy пакет, он имеет большую удобную встроенную функциональность. Вероятно, будет намного более эффективно использовать их структуры данных, чем списки списков, и т.д.

from __future__ import division

import numpy

data = numpy.asarray([1,2,3,4,5])
dists = data.reshape((1,5)) / data.reshape((5,1))

print dists

which = dists.argmin()
(r,c) = (which // 5, which % 5) # assumes C ordering

# pick whichever is most appropriate for you...
minval = dists[r,c]
minval = dists.min()
minval = dists.ravel()[which]
3
ответ дан Mr Fooz 28 November 2019 в 18:27
поделиться

Выполнение его mathy путь...

nums = [1, 2, 3, 4, 5]
min_combo = (min(nums), max(nums))

, Если, конечно, у Вас нет отрицательных сторон там. В этом случае это не будет работать, потому что Вы на самом деле хотите минуту и макс. абсолютные значения - числитель должен быть близко к нулю и знаменателю отнюдь нет, в любом направлении. И двойные отрицательные стороны повредили бы его.

1
ответ дан Nikhil Chelliah 28 November 2019 в 18:27
поделиться

При работе с Python ≥2.6 (включая 3.x), Вы можете:

from __future__ import division
import operator, itertools

def getmin(alist):
    return min(
        (operator.div(*pair), pair)
        for pair in itertools.product(alist, repeat=2)
    )[1]

getmin([1, 2, 3, 4, 5])

РЕДАКТИРОВАНИЕ: Теперь, когда я думаю о нем и если я помню свою математику правильно, это должно также дать ответ, предполагающий, что все числа являются неотрицательными:

def getmin(alist):
    return min(alist), max(alist)
1
ответ дан tzot 28 November 2019 в 18:27
поделиться
>>> nums = [1, 2, 3, 4, 5]    
>>> min(map((lambda t: ((float(t[0])/t[1]), t)), ((x, y) for x in nums for y in nums)))[1]
(1, 5)
0
ответ дан 28 November 2019 в 18:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: