gpt4 book ai didi

python - 如何使用 2 个条件中的任何一个拆分行?

转载 作者:行者123 更新时间:2023-11-28 19:46:57 25 4
gpt4 key购买 nike

我有一个像这样的 str:

-110-108 -95 -92 -88 -87 -85 -75  -73 -69 -67 -59 -51 -49 -47 -42  -39 -35 -36 -36 -32 -27 -29 -32

我需要将它拆分成一个列表,以便获得所有 24 个元素,例如:

["-110", "-108", "-95" ....]

我尝试了 line.split("") 但这不起作用,因为我得到的列表是:

["-110-108" ...]

这是因为 -110 和 -108 之间没有空格。

我尝试拆分为 line.split("-") 但这有两个问题:

delim 丢失,如果没有负号,则将整数作为字符串处理。

如:["-", "110", "-", "95".... , "5 6 7"] 假设有正数。

我该如何拆分它,因为 str 包含 24 个数字,我需要一个包含所有 24 个数字作为具有大小的元素的列表。

最佳答案

您可以使用 regex :

import re

s = "-110-108 -95 -92 -88 -87 -85 -75 -73 -69 -67 -59 -51 -49 -47 -42 -39 -35 -36 -36 -32 -27 -29 -32"

l = [x for x in re.split("(-?\d+)",s) if x.rstrip()]

print(l)

输出:

['-110', '-108', '-95', '-92', '-88', '-87', '-85', '-75', '-73', 
'-69', '-67', '-59', '-51', '-49', '-47', '-42', '-39', '-35',
'-36', '-36', '-32', '-27', '-29', '-32']

解释:

re.split(pattern, string) 使用一个模式来分割,我提供给它的模式 (-?\d+) 意思是:可选的 - 后跟一位或多位数字。

列表理解通过使用 if x.rstrip() 排除空 (== False) 结果来过滤“空”或“仅空白”拆分。

如果你也想转换它们,使用:

l = [int(x) for x in re.split("(-?\d+)",s) if x.rstrip()]

或者 - 性能不佳,创建大量中间字符串,您可以“修复”它:

s = "-110-108 -95 -92 -88 -87 -85 -75  -73 -69 -67 -59 -51 -49 -47 -42  -39 -35 -36 -36 -32 -27 -29 -32"

for i in range(10):
s = s.replace(f'-{i}',f' -{i}') # replace any "-0","-1",...,"-9"
# with " -0"," -1",...," -9"

l = [x for x in s.split(" ") if x] # split by ' ' only use non-empty ones

您可以通过遍历字符来自行拆分它(仍然比生成大量中间字符串更好)

s = "-110-108 -95 -92 -88 -87 -85 -75  -73 -69 -67 -59 -51 -49 -47 -42  -39 -35 -36 -36 -32 -27 -29 -32"

result = [] # complete list
tmp = [] # partlist
for c in s: # char-wise iteration
if c != '-':
tmp.append(c)
else:
if tmp:
result.append(''.join(tmp).strip())
tmp = ['-']

if tmp: # tmp not empty, and not yet added (last number in s)
result.append(''.join(tmp))

print(result)

关于python - 如何使用 2 个条件中的任何一个拆分行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49155321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com