【问题标题】:How to replace empty instance in list with Python? [duplicate]如何用 Python 替换列表中的空实例? [复制]
【发布时间】:2018-12-02 02:31:05
【问题描述】:

我想在列表compare 中用'.' 替换空实例''

compare = ['ŋsbluː', 'mən', '', 'blˈyːt', '', 'ʔˈɛs']
compare = [w.replace('', '.') for w in compare]

输出:['.ŋ.s.b.l.u.ː.', '.m.ə.n.', '.', '.b.l.ˈ.y.ː.t.', '.', '.ʔ.ˈ.ɛ.s.]'

但我想要:['ŋsbluː', 'mən', '.', 'blˈyːt', '.', 'ʔˈɛs']

【问题讨论】:

  • print([i if i else "." for i in compare]) ?

标签: python python-3.x


【解决方案1】:

您真正的意思是 compare = ['.' if w == '' else w for w in compare] 而不是 replace 它将替换代码中的每个零长度子字符串。

但是您实际上并不需要列表推导,因为它也可以是就地的。

for i, x in enumerate(compare):
    if x == '':
        compare[i] = '.'

【讨论】:

  • 这不是和他的问题一样吗?
  • @user3483203 抱歉,编辑错误
【解决方案2】:

compare = [i or '.' for i in compare]

【讨论】:

    【解决方案3】:

    您正在对列表中的各个元素调用replace。可以通过列表过滤来达到想要的效果:

    compare = ['ŋsbluː', 'mən', '', 'blˈyːt', '', 'ʔˈɛs']
    compare = ["." if x == "" else x for x in compare]
    

    【讨论】:

    • 你不应该用x == ""代替if not x
    • 最终归结为[x if x else '.' for x in compare] -> [x or '.' for x in compare]
    • 是的,这是一种更清洁的方法。用户明确表示空字符串,但在这种情况下他们似乎不太可能遇到None 或其他 false-y 值。
    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多