python - 在超过 4 个条件下使用列表理解

标签 python list-comprehension

我有一个列表列表。每个子列表包含两个整数元素。我想将这些元素中的每一个乘以 1.2,如果它们是正数并且大于某个数字,则将它们更改为该特定数字。如果它们较小,则相同。 我使用列表理解实现的乘法位。有了这些额外的条件,我有点迷路了——对我来说,它似乎过于复杂,甚至非 pythonic。我想知道我是否可以得到一些意见。

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

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 风格?

非常感谢!

最佳答案

使用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]

关于python - 在超过 4 个条件下使用列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55774803/

相关文章:

python - Fabric 本地 zsh 别名

python - 在每个其他元素列表理解之后在 Python 列表中插入元素

Python:获取每个公司的最新日期

python - 如何使用列表理解使嵌套列表的长度等于列表中数字的值?

python - 为什么当我尝试使用 fit_generator 训练 Keras 时,它会在第一个 epoch 停止?

python - scikits ARI 实现中是否存在错误,或者我对算法的理解是否有缺陷?

python - 当满足条件时关闭 scrapy 蜘蛛并返回输出对象

python - 比较两个具有重复项的字符串列表并打印差异

python - 列表理解清理的更清洁方法

python - 如何展开列表理解