我有一个数字列表清单
a = [[1,2,3,4,5,6],
[7,8,9,10,11,12],
[13,14,15,16,17,18]]
我想将第n个元素替换为0,以得到类似的结果(在这种情况下,n = 3)
a = [[0,2,3,0,5,6],
[0,8,9,0,11,12],
[0,14,15,0,17,18]]
我希望像这样
a = [[i, j if j %n == 0 else i] for i, j in a]
但是我不知道它需要什么参数。
答案 0 :(得分:3)
您可以在内部列表推导内使用ternary if
-else
,并使用enumerate
来访问索引,每个元素作为元组:
n = 3
result = [[x if i % n else 0 for i, x in enumerate(y)] for y in a]
应用于您的示例列表,
>>> a = [[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18]]
>>> n = 3
>>> [[x if i % n else 0 for i, x in enumerate(y)] for y in a]
[[0, 2, 3, 0, 5, 6], [0, 8, 9, 0, 11, 12], [0, 14, 15, 0, 17, 18]]
答案 1 :(得分:0)
尝试此代码。
a = [[1,2,3,4,5,6],
[7,8,9,10,11,12],
[13,14,15,16,17,18]]
n=3
for out in range(0,len(a)):
for i in range(0,len(a[out])):
if i == n:
a[out][i] = 0
print(a)
答案 2 :(得分:0)
切片列表并创建一个新的0呢?
n=3;
a = [l[:n] + [0] + l[n+1:] for l in a]
答案 3 :(得分:0)
ggorlen有正确的方法,但只是为了您的理解和其他想要学习列表理解的人详述。
首先,您需要遍历列表中的每个项目-
[item for item in l]
[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18]]
接下来,您将对索引应用一个条件(位置必须为3),但是还需要修改元素本身。因此,您需要一起遍历索引和元素。
[[(i,n) for i,n in enumerate(item)] for item in l]
[[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)],
[(0, 7), (1, 8), (2, 9), (3, 10), (4, 11), (5, 12)],
[(0, 13), (1, 14), (2, 15), (3, 16), (4, 17), (5, 18)]]
每个元组是(索引,元素)。 最后,您需要您的条件。列表理解中有多种使用if条件的方法,但是对于您而言,您需要检查(index,element)元组中的索引,并查看除以3后它是否返回余数。如果是,则返回该元素否则返回0。
[[n if i%3 else 0 for i,n in enumerate(item)] for item in l]
[[0, 2, 3, 0, 5, 6], [0, 8, 9, 0, 11, 12], [0, 14, 15, 0, 17, 18]]
希望这种解释可以帮助您解决类似这样的未来问题。
干杯。
答案 4 :(得分:0)
解决方案
a = [[0 if index==0 else j for index, j in enumerate(i)] for i in a]
>>> a = [[1,2,3,4,5,6], [7,8,9,10,11,12], [13,14,15,16,17,18]]
>>> a = [[0 if index==0 else j for index, j in enumerate(i)] for i in a]
>>> a
[[0, 2, 3, 4, 5, 6], [0, 8, 9, 10, 11, 12], [0, 14, 15, 16, 17, 18]]
在Python 3.8中,您将引入赋值表达式。
这是一个新的符号:= ,它允许(除其他事项外)进行理解。
答案 5 :(得分:0)
尽管将花费多行代码,但是您可以通过如下所示的方式来创建通用解决方案,这将修改 inplace 列表列表,因此比重新创建整个内容只是为了更改一些值。
def replace_nth(list_of_lists, n, value):
for sublist in list_of_lists:
for i, v in enumerate(sublist):
if not i % n:
sublist[i] = value
a = [[1,2,3,4,5,6],
[7,8,9,10,11,12],
[13,14,15,16,17,18]]
replace_nth(a, 3, 0)
print(a) # -> [[0, 2, 3, 0, 5, 6], [0, 8, 9, 0, 11, 12], [0, 14, 15, 0, 17, 18]]