如果为空,则在子列表中输入值

时间:2017-07-03 16:13:04

标签: python list sublist

所以我有一个更大的for循环,它产生各种大小的嵌套列表:例如

[[6], [3], [5], [3, 2, 5, 3], [5], [6, 5, 4], [5, 3, 2]]
[[5], [], [], [4], [3]]
[[5], [2]]
[[], [4], [3, 2, 4]

简而言之,我希望每个具有空子列表的数组都只是值0.所以就像:  如果生成的列表是:     [[6], [3], [5], [3, 2, 5, 3], [5], [6, 5, 4], [5, 3, 2]]

然后我会保持这种方式。

但如果生成的列表是:[[5], [], [], [4], [3]]

然后我希望它是: [[5], [0], [0], [4], [3]]

同样,对于上面的最后一行,我希望它是:[[0], [4], [3, 2, 4]

我一直在尝试以下方面:

for k in range(0,len(TempAisle)):
           if TempAisle[k][0] == None:
               TempAisle[k][0]= 0
 k+=1

但我收到list index out of range错误。

这似乎是一个相当简单的问题,并且已经看到其他人已经问过如何检查是否有一个空的子列表,但是我无法用另一个值替换它(在我的情况下为0)。任何帮助和解释将不胜感激。

2 个答案:

答案 0 :(得分:4)

您可以直接迭代这些项目 - 更多 Pythonic 方式 - 无需使用range。测试每个项目的真实性(空列表是 falsy ),并且仅在子列表为空时才附加零:

for x in TempAisle:
    if not x:
        x.append(0)

答案 1 :(得分:3)

对于单行解决方案:

x = [elem or [0] for elem in TempAisle]

基于@Moses Koledoye评论的编辑,以避免创建新列表,但将其保持为单行解决方案:

[x.append(0) for x in TempAisle if not x]