Преобразуйте метод двух циклов в одну лямбда-функцию - PullRequest
1 голос
/ 18 апреля 2019

Я создал этот метод «два для циклов», в котором предположим, что если я должен разбить предложение на список как [w1, w2, w3, .., wn], я хочу вывести следующие пары (НЕ биграммы)

 for i in range(len(words)):
    for j in range(i+1, range(len(words))):
        couples = (words[i], words[j])
  • w1, w2
  • w1, w3
  • w1, w4
  • ....
  • ....
  • w2, w3
  • w2, w4
  • ....

Но я хочу использовать формат лямбда-функции, чтобы она использовалась в моей программе apache spark Кто-нибудь может мне помочь?

Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 18 апреля 2019

Я бы начал с итерации по списку:

for x in words:
    for y in words:
        couples = x, y

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

for i, x in enumerate(words):
    for y in words[i:]:
        couples = x, y

Теперь мы можем перевести это в выражение генератора (а не лямбда):

all_couples = ((x, y) for y in words[i:] for i, x in enumerate(words))
1 голос
/ 18 апреля 2019

Использование комбинаций из itertools даст желаемый результат.

from itertools import combinations
for tup in combinations(words, 2):
    print(tup)

('This', 'is')
('This', 'an')
('This', 'example')
('This', 'sentence')
('is', 'an')
('is', 'example')
('is', 'sentence')
('an', 'example')
('an', 'sentence')
('example', 'sentence')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...