Python перебирает несколько элементов - PullRequest
0 голосов
/ 30 октября 2019

У меня есть вложенный список целых чисел:

dimensions = [[3, 12, 42], [19, 16, 10], ..., [2, 13, 20]]

Мне нужно сгладить список, выполнив эту операцию для каждого подсписка:

[a, b, c] ==> 2 * (ab + bc + ac)

Мне удалось сделать это вочень явно, мне было интересно, есть ли более элегантное / питоническое решение

Ответы [ 4 ]

1 голос
/ 30 октября 2019

Конечно, вам не нужно ничего более сложного, чем

[2 * (a*b + b*c + a*c) for a,b,c in dimensions]
1 голос
/ 30 октября 2019

Вы можете использовать itertools.combinations, чтобы получить пары элементов:

from itertools import combinations
[sum(a * b for a, b in combinations(l, 2)) * 2 for l in dimensions]

, так что с учетом:

dimensions = [[3, 12, 42], [19, 16, 10], [2, 13, 20]]

это возвращает:

[1332, 1308, 652]
0 голосов
/ 30 октября 2019

Вы можете попробовать это:

result = []
for sublist in dimensions:
        for a,b c in sublist:
             value = 2*(a*b+b*c+a*c)
             result.append(value)
print(result)
0 голосов
/ 30 октября 2019

Как однострочник в понимании списка.

[2* (e[0]*e[1] + e[1]*e[2] + e[0]*e[2]) for e in dimensions]
...