【问题标题】:How to overwrite a nested list using conditional list comprehension如何使用条件列表理解覆盖嵌套列表
【发布时间】:2019-11-17 16:02:27
【问题描述】:

我正在尝试检查每个嵌套的较大数字,并仅用具有最大值的数字的值覆盖每个嵌套列表。 我已经使用嵌套循环做到了这一点,但我想知道如何使用条件列表理解来做到这一点。 这是我的嵌套循环解决方案:

list1 = [[1,2,4,3], [1,2,755,244], [1,2,6,1000] , [5,3,7,13]]
iterator = 0
for val1 in list1:
  for num in val1:
    if num == max(val1):
      list1[iterator] = num
  iterator +=1

这是我尝试使用列表理解但语法错误的方法:

num  for x in list1 for num in x if num ==max(x)

错误是:语法无效

【问题讨论】:

  • 语法错误是什么意思?给出错误。一方面,您似乎缺少括号。
  • 列表理解部分给了我一个语法错误。我只得到无效的语法,它指向第一个 for 循环,我在帖子中添加了一个屏幕截图
  • 我们不要截图,发minimal reproducible example作为文本
  • 生成器表达式如 listcomp 需要放在括号中。如果您正在执行 listcomp,则表达式需要在 [] 内。
  • @jornsharpe2 在这种情况下,它是指向第一个 for 的无效语法错误。

标签: python-3.x list conditional-statements list-comprehension


【解决方案1】:

您粘贴的代码可以正常工作。话虽这么说,你可以写得更干净:

list1 = [[1,2,4,3], [1,2,755,244], [1,2,6,1000] , [5,3,7,13]]
iterator = 0
for index, val in enumerate(list1):
    list1[index] = max(val)
print(list1) # [4, 755, 1000, 13]

带有max的更简洁的listcomp版本:

list1 = [[1,2,4,3], [1,2,755,244], [1,2,6,1000] , [5,3,7,13]]
list1 = [max(lst) for lst in list1]
print(list1) # [4, 755, 1000, 13]

【讨论】:

  • 感谢您的回答。这将返回最大的数字。我实际上想要做的是用每个嵌套列表中的最大数量覆盖每个嵌套列表,而不创建新列表。使用嵌套循环得到的结果相同。
  • 就做list1 = [max(lst) for lst in list1](见我的更新)...或者你有什么理由不想把它放在内存中?如果是这样,您就不能使用 listcomp。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多