【问题标题】:appending to list in list comprehension在列表理解中附加到列表
【发布时间】:2019-11-06 07:26:24
【问题描述】:

我正在尝试获取列表和浮动的最小值,我有以下代码但它给出了错误

x=['14.99', '14.99', '15.00', '16.36']
y=21.00
min([float(i) for i in x.append(y)])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not iterable
#x= ['14.99', '14.99', '15.00', '16.36', 21.0] y got appended  

但是,如果我这样做(在列表理解之前附加 y)

x=['14.99', '14.99', '15.00', '16.36']
y=21.00
x.append(y)
min([float(i) for i in x])

输出是:14.99 #正确

我怎样才能在一行中做到这一点?

【问题讨论】:

  • list.append() 总是返回 None,如果这是您所要求的,与大多数其他列表操作方法相同。
  • @MikeScotty 不是 x 可迭代的吗?
  • 是的,但这不是重点。您正在尝试迭代x.append(y)返回值,即None
  • @MikeScotty 那么我该如何在一行中做到这一点?

标签: python list


【解决方案1】:

试试这个

min(y, min([float(i) for i in x]))

或者这个更易读

min(y, min(map(float, x)))

基本上你将浮点 y 与列表的最小值进行比较。

【讨论】:

  • 我想要 5 项中的最小值,而不是列表中的最小值
  • @programmerwiz32 将给出 5 个项目中的最小值。例如,您可以通过设置 y=11 来检查,它会给出 11。
【解决方案2】:
x=['14.99', '14.99', '15.00', '16.36']
y=21.00
min(float(x) for x in x+[y])

这会将y 作为一个列表连接到x 列表,然后找到所有这些列表的最小值。

Allow python list append method to return the new list

【讨论】:

    【解决方案3】:

    在我看来这很丑陋,但你可以这样做:

    min([float(i) for i in x+[y])])
    

    【讨论】:

    • 什么是更好看的方式
    • 恕我直言,“更好看的方式”是为了保留您的原始代码。它更具可读性,甚至应该更有效(附加到现有对象而不是创建一个新对象 - 或者更确切地说是两个新对象,因为您首先从 y 创建一个新列表,然后从 x 创建另一个新列表和[y])。
    • 我会用两行来明确表示:_list = [float(i) for i in x]+[y],然后是min(_list)。如果您不在乎覆盖 x,那么您发布的代码是最好的。
    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多