Наиболее питонический способ использования условий len () с несколькими аргументами в понимании списка - PullRequest
0 голосов
/ 12 мая 2018

1) Какой самый питонный способ использовать несколько условных операторов if в понимании списка?

2) Len () возвращает ошибку, если строки объединяются при вызове функции.

 Len(str(x) + str(y)) is not allowed

Пункт 2 неверен, но оставлен для будущих читателей

Является ли lambda подходящей функцией для использования при использовании оператора if len () следующим образом:

for j in blah:
       for i in range(4):
           inputs = set([ str(j) + "".join(x) for x in itertools.permutations(total, i) if 14 > len(lambda j,x : str(j) + "".join(x)) and len(lambda j, x : str(j) + "".join(x)) > 9])

1 Ответ

0 голосов
/ 12 мая 2018

Ваш код не работает, и у вас нет примера ввода и вывода для проверки, поэтому я предполагаю здесь. Я вижу str(j) + "".join(x) несколько раз, и это хороший показатель того, что генераторы расположены в неправильном порядке. Вы делаете str(j) много, что намекает на предварительную обработку в порядке. Это также помогает именовать переменные таким образом, чтобы было понятно, кто они. А добавление интервала для сохранения коротких строк и в логических группировках облегчает сканирование позже.

import itertools

blah = [10**n for n in range(5,15)]
total = 'fubar'

for blahval, permlen in itertools.product(map(str,blah), range(4)):
    inputs = set((newinput for newinput in
        (blahval + "".join(permutation)
            for permutation in itertools.permutations(total, permlen))
        if 14 > len(newinput) > 9))
...