使用4个以上条件的列表理解

2024-05-16 08:43:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子。每个子列表包含两个整数元素。我想把每个元素乘以1.2,如果它们是正数,大于某个数,就把它们改成那个数。如果它们更小的话也一样。 我使用列表理解实现的乘法位。有了这些额外的条件,我有点迷路了-对我来说,这似乎过于复杂,甚至非肾盂。我想知道我是否能得到一些意见。你知道吗

我使用列表理解实现的乘法位。有了这些额外的条件,我有点迷路了-对我来说,这似乎过于复杂,甚至非肾盂。我对如何将所有条件都放入列表理解中有一个粗略的想法,但当我开始实现它们时,我感到困惑。我想知道我是否能得到一些意见。你知道吗

MAX_VOL = 32767  # audio data is the list of lists
MIN_VOL = -32767
audio_list = [[int(x*1.2), int(y*1.2)] for x, y in audio_data]

# My idea was something like:
audio_list = [[int(x*1.2), int(y*1.2) if x > MAX_VOL x == MAX VOL if x < MIN_VOL....] for x, y in audio_data]

首先,我很肯定有语法问题。但是,对于每个数字,我必须检查它是正的还是负的,然后,如果它大于或小于最大/最小体积。那么,这是否可能使用列表理解?它是有效的和Python?你知道吗

非常感谢!你知道吗


Tags: 元素列表fordatamin条件audiomax
3条回答

如果列表理解太复杂,那么不要使用它。你应该试着让你的解决方案容易让别人理解,如果你一年后再来的话,你也能理解。你知道吗

for x,y in audio_data:
    if x > MAX_VOL:
        foo = int(x*1.2)
        bar = int(y*1.2)
    if x == MAX_VOL:
        ...

使用minmax

MAX_VOL = 32767  # audio data is the list of lists
MIN_VOL = -32767

audio_list = [[int(max(MIN_VOL, min(MAX_VOL, x*1.2))), int(max(MIN_VOL, min(MAX_VOL, y*1.2)))] for x, y in audio_data]

因为这些是长表达式,所以也要使用函数:

def clip(s):
    return int(max(MIN_VOL, min(MAX_VOL, s)))
audio_list = [[clip(x*1.2)), clip(y*1.2)] for x, y in audio_data]

定义一个不允许值超过最大或最小体积的边界函数。然后你仍然可以使用列表理解。你知道吗

MAX_VOL = 32767  # audio data is the list of lists
MIN_VOL = -32767

# Ensure volume does not exceed limits.
def bounded(val):
    if val > MAX_VOL:
        return MAX_VOL
    elif val < MIN_VOL:
        return MIN_VOL
    return val

audio_list = [[bounded(int(x*1.2)), bounded(int(y*1.2))] for x, y in audio_data]

相关问题 更多 >