我有一个列表,它是一个字符串的结果.split。
例如,字符串numbers = "1/2//4//6":
>>> numbers = numbers.split("/")
['1', '2', '', '4', '', '5']
Run Code Online (Sandbox Code Playgroud)
我想基于该列表创建一个列表,在该列表中,任何空值(即'')都将替换为仅以空值递增的数字。因此,最终结果应为:
[1, 2, 1, 4, 2, 6]
Run Code Online (Sandbox Code Playgroud)
第一个空值已替换为1,第二个空值已替换为2。
我创建了一个可以做到这一点的循环,但是坦率地说,这很麻烦,让我回到了Java:
auto = 1
for i,number in enumerate(numbers):
if number == "":
numbers[i] = auto
auto += 1
else:
numbers[i] = int(number)
Run Code Online (Sandbox Code Playgroud)
我希望能够在不使用外部变量的情况下执行此操作,并且理想情况下,可以通过列表理解来实现。
这在Python中可行吗?
Aja*_*234 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('/')]
Run Code Online (Sandbox Code Playgroud)
输出:
[1, 2, 1, 4, 2, 6]
Run Code Online (Sandbox Code Playgroud)
编辑:如果您希望避免与增量过程相关的“外部”变量,并且如果您愿意存储数字的拆分结果,则可以使用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)]
Run Code Online (Sandbox Code Playgroud)
输出:
[1, 2, 1, 4, 2, 6]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |