根据条件,在一个列表中理解多个功能。

问题描述 投票:0回答:2

我在EdaBit上发现了一个编码挑战。

在一个整数范围内

  1. 把每一个3的倍数都替换成... ... WORD
  2. 将每一个5的倍数替换为 EXAMPLE
  3. 取而代之的是 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]

一般来说,你能不能根据不同的条件 创建一个以上的函数的列表理解?

python python-3.x list list-comprehension
2个回答
2
投票

是的,它可以做到(虽然不可取,因为它很难读懂)。代码将是

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
投票

你可以像这样定义一个函数来处理所有的逻辑。

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)]
© www.soinside.com 2019 - 2024. All rights reserved.