【问题标题】:How to use lambda if else in map() on list in python?如何在python列表中的map()中使用lambda if else?
【发布时间】:2020-02-17 11:59:10
【问题描述】:

我有一个列表['apple', 'banana', 'cherry']

我想在它上面运行地图,它会选择一些项目

l = map(lambda x : x if x == "apple" else pass, ['apple', 'banana', 'cherry'])

它似乎应该可以工作,但是它给出了语法错误

这里有什么问题?

【问题讨论】:

  • 您希望pass 分支上发生什么?请注意,map每个 输入元素转换为输出元素。它不能删除元素。
  • 我通常的提醒:如果您需要lambda 来使用mapfilter,请不要。与通过内联相同逻辑来避免lambda 的等效列表理解/生成器表达式相比,它会更慢且可读性更低。
  • @ShadowRanger 你能举个例子吗?
  • @rahulKushwaha:举个例子?您的答案已经显示了选项(map/filter、listcomp、genexpr)。

标签: python list dictionary lambda


【解决方案1】:

您可能在这里需要filter 并使用lambda x : x == "apple"

例如:

l = list(filter(lambda x : x == "apple", ['apple', 'banana', 'cherry']))
print(l)

【讨论】:

  • 或列表理解:l = [x for x in input if predicate(x)]
【解决方案2】:

你需要这个:

[x for x in ['apple', 'banana', 'cherry'] if x == "apple"]

【讨论】:

    【解决方案3】:

    pass 不是一个值,所以你不能在表达式中使用它。你可以使用None,但你最终会得到['apple', None, None],而不仅仅是['apple'],所以你必须像这样过滤Nones:

    l = filter(lambda x: x is not None, map(lambda x : x if x == "apple" else None, ['apple', 'banana', 'cherry']))
    

    更简洁的解决方案是使用列表推导:

    l = [ x for x in ['apple', 'banana', 'cherry'] if x == 'apple' ]
    

    【讨论】:

      【解决方案4】:

      根据您的list 的大小,使用generator 而不是list 理解可能会更好,即:

      l = (x for x in ['apple', 'banana', 'cherry'] if x=='apple')
      

      通常list 理解会导致比同等生成器更大的内存使用量,尽管对于小尺寸差异可能可以忽略不计。

      【讨论】:

        【解决方案5】:

        你不能在条件表达式中使用pass关键字(三元运算符)

        你可以在PEP308阅读更多关于条件表达式的内容

        所以,如果你想使用 map 内置函数,你必须为三元运算符选择一个 "else" 值,例如:

        map(lambda x : x if x == "apple" else None, ['apple', 'banana', 'cherry'])
        

        或者如果你想通过字符串“apple”过滤你的列表,你可以通过使用内置函数filter来使用@Rakesh建议的解决方案:

        list(filter(lambda x : x == "apple", ['apple', 'banana', 'cherry']))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-13
          • 1970-01-01
          • 2022-07-07
          • 2016-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多