如何在Python中使用列表理解将空元素保留在列表中?

2024-09-27 17:58:34 发布

您现在位置:Python中文网/ 问答频道 /正文

ls=['ISSN1','94500','2424922X','','21693536','01464116','16879724','22042326','07419341','09272852','00015903','0324721X','']
ls = [i.zfill(8) for i in ls if i != ""]
ls

Output:
['000ISSN1',
 '00094500',
 '2424922X',
 '21693536',
 '01464116',
 '16879724',
 '22042326',
 '07419341',
 '09272852',
 '00015903',
 '0324721X']

但是,这删除了空元素。我尝试了其他几种方法来保持空元素:

方法1:

for i in range(len(ls)):
    if ls[i]!="":
        ls[i]=str(ls[i]).zfill(8)
    else:
        pass
    
ls

方法2:

def changes(ls):
    for i in range(len(ls)):
        if ls[i]!="":
            ls[i]=str(ls[i]).zfill(8)
        else:
            pass
    return ls

ls=changes(ls)
ls

这两种方法都返回我所需的输出:

['000ISSN1',
 '00094500',
 '2424922X',
 '',
 '21693536',
 '01464116',
 '16879724',
 '22042326',
 '07419341',
 '09272852',
 '00015903',
 '0324721X',
 '']

我仍然在想,是否有一种方法可以达到与列表理解相同的结果


Tags: 方法in元素foroutputlenifrange
3条回答

见下文

ls = ['ISSN1', '94500', '2424922X', '', '21693536', '01464116', '16879724', '22042326', '07419341', '09272852',
      '00015903', '0324721X', '']
ls = [i.zfill(8) if i else i for i in ls]
print(ls)

输出

['000ISSN1', '00094500', '2424922X', '', '21693536', '01464116', '16879724', '22042326', '07419341', '09272852', '00015903', '0324721X', '']

您可以在理解中使用条件表达式(a if condition else b):

ls = [i.zfill(8) if i else i for i in ls]

请注意,这将if i != ""缩短为if i,因为在布尔上下文中只有空字符串为false

对于您的特定情况,您还可以使用一些技巧(使用True == 1, False == 0)使其更短:

ls = [i.zfill(8*bool(i)) for i in ls]

您只需在代码中添加一个“else”

ls=['ISSN1','94500','2424922X','','21693536','01464116','16879724','22042326','07419341','09272852','00015903','0324721X','']
ls = [i.zfill(8) if i != "" else '' for i in ls]
ls

输出:

enter image description here

相关问题 更多 >

    热门问题