Несколько функций в одном списке понимания в зависимости от условий - PullRequest
0 голосов
/ 02 мая 2020

Я обнаружил проблему кодирования в EdaBit:

В диапазоне целых чисел:

  1. замените каждое число, кратное 3, на WORD
  2. заменить каждое число, кратное 5, на EXAMPLE
  3. заменить каждое число, кратное 3 и 5, на WORDEXAMPLE
  4. вернуть их все в списке с числами, не кратными 3 и 5 между ними.

Я хочу использовать список понимания , чтобы сделать это. Я пришел с этим, который не работает:

return [i for i in range(start, end) if i%3 != 0 and i%5 != 0, "WORD" for i in range(start, end) if i%3==0 and i%5!=0, "EXAMPLE" for i in range(start, end) if i%3!=0 and i%5==0, "WORDEXAMPLE" for i in range(start, end) if if i%3==0 and i%5==0]

, и я хочу, чтобы это было одно понимание списка, а не что-то вроде:

others = [i for i in range(start, end) if i%3 != 0 and i%5 != 0]
multiples_3 = ["WORD" for i in range(start, end) if i%3 == 0 and i%5 != 0]
multiples_5 = ["EXAMPLE" for i in range(start, end) if i%3 != 0 and i%5 == 0]
multiples_3_and_5 = ["WORDEXAMPLE" for i in range(start, end) if i%3 == 0 and i%5 == 0]

Вообще говоря, вы можете создать список понимания, которые используют более одной функции в соответствии с различными условиями?

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Да, это может быть сделано (хотя не рекомендуется, так как это трудно читать и понимать). Код будет

numbers = range(1, 100) # Example
returned_list = ["WORDEXAMPLE" if i%(3*5)==0 else "WORD" if i%3==0  else "EXAMPLE" if i%5==0 else i for i in numbers]

. В понимании списка вам нужно использовать несколько операторов else (аналогично инструкциям elif).

1 голос
/ 02 мая 2020

Вы можете определить функцию, которая будет заботиться обо всех логах c, например:

def relace_num(num):
    if num % (3*5) == 0:
        return 'WORDEXAMPLE'
    elif num % 3 == 0:
        return 'WORD'
    elif num % 5 == 0:
        return 'EXAMPLE'
    else:
        return num

И затем использовать одно понимание списка:

 [relace_num(x) for x in range(start, end)]
...