我有一个列表,该列表是字符串.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中可行吗?
答案 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]