微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

If-else 列表理解列表

如何解决If-else 列表理解列表

我有以下列表:

list1 = [[1,"one"],[2,"two"],[3,"three]]

我想要输出

list2 = [[11,"three"]]

使用 if-else 语句进行列表解析似乎是一个不错的选择。

list2 = [x if x[0] != 1 else 11 for x[0] in list1]

但是,我收到未定义“x”的 NameError。我应该如何定义 x?

解决方法

你不能做for x[0] in <iterable>,你需要使用整个内部列表/序列。要获得您正在寻找的结果,您可以使用二级列表理解,或仅将列表与一级理解的列表连接,如下所示:

>>> [x if x[0]!=1 else [11]+x[1:] for x in list1]
[[11,'one'],[2,'two'],[3,'three']]
,

使用列表推导式,您必须重建整个子列表,因为无法改变列表使用单个表达式获得结果:

list2 = [x if x[0] != 1 else [x[0]+10,x[1]] for x in list1]

(使用 *x 而不是 x[1] 来推广到更长的子列表。)

使用普通的 for 循环,如果您不需要浅拷贝,您可以简单地改变现有列表。

for x in list1:
    if x[0] == 1:
        x[0] += 10

(并且在任何情况下,您都可以用硬编码的 11 替换加法 10,因为如果条件成功,您就知道 x[0] 的确切值。)

,

您需要对代码进行一些更改。我发现了以下问题:

  • 您需要遍历整个列表,因此您需要一行:x in list1 而不是 x[0] in list1
  • 你需要把sublist的两个元素都加回去,目前你直接加了x,不加修改

list2 = [[11,x[1]] if x[0] == 1 else x for x in list1]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?