If-else 列表理解列表
If-else List of lists comprehension
我有以下列表:
list1 = [[1,"one"],[2,"two"],[3,"three]]
我想要输出:
list2 = [[11,"one"],[2,"two"],[3,"three"]]
使用 if-else 语句的列表理解似乎是一个不错的选择。
list2 = [x if x[0] != 1 else 11 for x[0] in list1]
但是,我收到 'x' 未定义的 NameError。我应该如何定义x?
你不能做for x[0] in <iterable>
,你需要使用整个inner-list/sequence。要获得您正在寻找的结果,您可以使用二级列表理解,或者仅使用一级理解的列表连接,如下所示:
>>> [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
- 您需要将子列表的两个元素都添加回来,目前您直接添加 x 没有修改
list2 = [[11, x[1]] if x[0] == 1 else x for x in list1]
我有以下列表:
list1 = [[1,"one"],[2,"two"],[3,"three]]
我想要输出:
list2 = [[11,"one"],[2,"two"],[3,"three"]]
使用 if-else 语句的列表理解似乎是一个不错的选择。
list2 = [x if x[0] != 1 else 11 for x[0] in list1]
但是,我收到 'x' 未定义的 NameError。我应该如何定义x?
你不能做for x[0] in <iterable>
,你需要使用整个inner-list/sequence。要获得您正在寻找的结果,您可以使用二级列表理解,或者仅使用一级理解的列表连接,如下所示:
>>> [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
- 您需要将子列表的两个元素都添加回来,目前您直接添加 x 没有修改
list2 = [[11, x[1]] if x[0] == 1 else x for x in list1]