遍历列表并用索引替换值

时间:2019-09-09 15:20:08

标签: python

我有一个列表,该列表是字符串.split的结果。

例如字符串numbers = "1/2//4//6"

>>> numbers = numbers.split("/")
['1', '2', '', '4', '', '5']

我想创建一个列表,其中将任何空值(即'')替换为仅以空值递增的数字。所以最终结果应该是:

[1, 2, 1, 4, 2, 6]

第一个空值已替换为1,第二个空值已替换为2

我已经创建了一个可以执行此操作的循环,但是坦率地说,这很麻烦,让我回到Java:

auto = 1
for i,number in enumerate(numbers):
    if number == "":
        numbers[i] = auto
        auto += 1
    else:
        numbers[i] = int(number)

我希望能够在不使用外部变量的情况下执行此操作,并且最好是通过列表理解。

这在Python中可行吗?

1 个答案:

答案 0 :(得分:11)

您可以使用itertools.count

import itertools
c = itertools.count(1)
numbers =  "1/2//4//6"
result = [int(i) if i else next(c) for i in numbers.split('/')]

输出:

[1, 2, 1, 4, 2, 6]

编辑:如果希望避免与增量过程相关的“外部”变量,并且如果您愿意存储数字的分割结果,则可以使用enumerate。但是,它的效率和使用itertools.count一样干净:

numbers = "1/2//4//6".split('/')
result = [int(a) if a else sum(not c for c in numbers[:i])+1 for i, a in enumerate(numbers)]

输出:

[1, 2, 1, 4, 2, 6]
相关问题