【问题标题】:create list from list where values only increase by 1从列表中创建列表,其中值仅增加 1
【发布时间】:2019-08-09 02:31:27
【问题描述】:

下面的代码可以从列表中获取最大值。然后它将它与列表中剩余值的最大值进行比较,如果它比下一个最大值高 1 以上,它用比下一个最大值高 1 替换原始列表最大值。我希望代码搜索整个列表并确保列表中的任何值最多比列表中的任何其他值大 1。我知道这不是最好的解释,我希望下面的示例列表使我想要完成的工作更加清晰。

例如,我不希望得到如下的最终列表:

[0,2,0,3]

我希望最终的名单是

[0,1,0,2]

输入:

empt=[0,2,0,0]

代码:

nwEmpt=[i for i in empt if i !=max(empt)]


nwEmpt2=[]

for i in range(0,len(empt)):
    if (empt[i]==max(empt))&(max(empt)>(max(nwEmpt)+1)):
        nwEmpt2.append((max(nwEmpt)+1))
    elif (empt[i]==max(empt))&(max(empt)==(max(nwEmpt)+1)):
        nwEmpt2.append(max(empt))
    else:
        nwEmpt2.append(empt[i])

输出:

nwEmpt2

[0,1,0,0]

【问题讨论】:

  • 我不确定它是否与您的问题有关,但 & 是按位与运算符。如果你想做逻辑与(看起来像),你需要and 运算符。这将使您摆脱大部分分组括号。

标签: python-3.x list for-loop


【解决方案1】:
min_value = min(empt)
empt_set = set(empt)
for i in empt:
  nwEmpt.append(min_value + len(list(filter(lambda x: x < i, empt_set))))

这给出了例如输入empt = [8, 10, 6, 4, 4] 输出nwEmpt = [6, 7, 5, 4, 4]

它通过将每个元素映射到(最小值)+(小于元素的不同值的数量)来工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2019-09-25
    • 2018-07-27
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    相关资源
    最近更新 更多