所以我输入了
6,10,47,3,6,9,54,7,9,0;3
我把它放在一个如下所示的列表中
['6', ',', '1', '0', ',', '4', '7', ',', '3', ',', '6', ',', '9', ',', '5', '4', ',', '7', ',', '9', ',', '0', ';', '3']
现在您看到双位数字现在是分开的。我明白,如果我使用.split(',')我可以从一开始就完美地拆分所有内容,但我想知道在这种状态下是否有可能加入那些本来应该在一起的数字(那些没有被分隔的数字)一个“,”字符)并将它们保存在列表中的相同位置。即列表中的1,0替换为1,0:
['6', ',', '10', ',',...]
我试过了
def join_nums(v):
for id2, char in enumerate(v):
if id2 == len(v) - 1:
return v
elif isinstance(v[id2 + 1], int):
v[id2:id2 + 1] = ["".join(v[id2:id2 + 1])]
它运行但没有做任何事情(甚至不确定是否关闭因为我还没有完全了解枚举列表!) 任何人都可以把我推向正确的方向。谢谢。
编辑:“;”不是拼写错误。我之所以选择不从一开始就分裂是因为我需要“,”s以后我不得不重写一些功能。我应该从头开始指明这一点,对不起。答案 0 :(得分:1)
假设你仍然可以操作原始字符串(或者你可以加入你已经回到字符串的列表),在这种情况下你可以使用re.findall()
。这将按顺序输出相同列表中的数字和分隔符:
>>> import re
>>> re.findall(r"\d+|[,;]", s)
['6', ',', '10', ',', '47', ',', '3', ',', '6', ',', '9', ',', '54', ',', '7', ',', '9', ',', '0', ';', '3']
此处\d+|[,;]
会匹配一个或多个数字(\d+
)或单个逗号或单个分号。
答案 1 :(得分:1)
这是一个使用itertools的简单解决方案:
lst = ['6', ',', '1', '0', ',', '4', '7', ',', '3', ',', '6', ',', '9', ',', '5', '4', ',', '7', ',', '9', ',', '0', ';', '3']
import itertools
groups = itertools.groupby(lst, key=lambda x: x.isdigit())
result = []
for is_int, vals in groups:
if is_int:
result.append(''.join(vals))
else:
result.extend(vals)
print(result) # ['6', ',', '10', ',', '47', ',', '3', ',', '6', ',', '9', ',', '54', ',', '7', ',', '9', ',', '0', ';', '3']
答案 2 :(得分:1)
尝试以下for
循环:
x = ['6', ',', '1', '0', ',', '4', '7', ',', '3', ',', '6', ',', '9', ',', '5', '4', ',', '7', ',', '9', ',', '0', ';', '3']
y = []
for i in range(len(x)):
if i < len(x)-1:
if x[i+1] in ',;':
y.append(int(x[i]));
else:
if x[i] not in ',;':
y.append(int(x[i]+x[i+1]))
else:
y.append(int(x[i]))
print y #[6, 10, 0, 47, 7, 3, 6, 9, 54, 4, 7, 9, 0, 3]
答案 3 :(得分:0)
为什么不
corrected = ''.join(wrongly_split).split(',')