找到值时停止循环,然后将值添加到列表
Stop a loop when a value is found and then add values to a list
如何创建一个循环,从如下所示的字符串列表中消除零?
List
GR0030
GR00000000013
GR093
我想消除 GR 和第一个不为零的数字之间的零。我以为我可以用这样的方法解决这个问题:
entry = ""
for x in list:
if x.isalpha():
entry = entry + x
else:
if x == 0:
entry = entry
else:
entry = entry + x[(list.index(x)):-1]
break
list1.append(entry) # the answer list
但是,它不起作用。我只是在每一行中得到一个完整的 GR 列表。我做错了什么?
这似乎很适合与 re.sub()
结合使用的正则表达式。 (?<=^GR)0*
表示字符串开头 'GR'
之后的 0 个或多个零。
import re
l = [
'GR0030',
'GR00000000013',
'GR093',
]
rx = re.compile(r'(?<=^GR)0*')
[rx.sub('', s) for s in l]
# ['GR30', 'GR13', 'GR93']
这非常具体,因为它不会更改 'SP0091'
、'ADGR0000400013'
或 '000ab'
.
等字符串
此处用正则表达式即可。该表达式匹配第一组零,并用空字符串替换它们。为了防止我们读过第一组,我们设置 count=1
.
您的方法可能行得通,但您必须跟踪您之前是否见过零。您还应该尽量避免重复连接字符串,如 .
import re
def strip_intermediate_zeroes(s):
return re.sub('0+', '', s, count=1)
items = ['GR0030', 'GR00000000013', 'GR093']
print(list(map(strip_intermediate_zeroes, items)))
以上代码片段假定“GR”后至少有一个零。如果无法做出这样的假设,您可以明确检查该假设作为快速修复:
def strip_intermediate_zeroes(s):
if s.startswith('GR0'):
return re.sub('0+', '', s, count=1)
return s
如何创建一个循环,从如下所示的字符串列表中消除零?
List
GR0030
GR00000000013
GR093
我想消除 GR 和第一个不为零的数字之间的零。我以为我可以用这样的方法解决这个问题:
entry = ""
for x in list:
if x.isalpha():
entry = entry + x
else:
if x == 0:
entry = entry
else:
entry = entry + x[(list.index(x)):-1]
break
list1.append(entry) # the answer list
但是,它不起作用。我只是在每一行中得到一个完整的 GR 列表。我做错了什么?
这似乎很适合与 re.sub()
结合使用的正则表达式。 (?<=^GR)0*
表示字符串开头 'GR'
之后的 0 个或多个零。
import re
l = [
'GR0030',
'GR00000000013',
'GR093',
]
rx = re.compile(r'(?<=^GR)0*')
[rx.sub('', s) for s in l]
# ['GR30', 'GR13', 'GR93']
这非常具体,因为它不会更改 'SP0091'
、'ADGR0000400013'
或 '000ab'
.
此处用正则表达式即可。该表达式匹配第一组零,并用空字符串替换它们。为了防止我们读过第一组,我们设置 count=1
.
您的方法可能行得通,但您必须跟踪您之前是否见过零。您还应该尽量避免重复连接字符串,如
import re
def strip_intermediate_zeroes(s):
return re.sub('0+', '', s, count=1)
items = ['GR0030', 'GR00000000013', 'GR093']
print(list(map(strip_intermediate_zeroes, items)))
以上代码片段假定“GR”后至少有一个零。如果无法做出这样的假设,您可以明确检查该假设作为快速修复:
def strip_intermediate_zeroes(s):
if s.startswith('GR0'):
return re.sub('0+', '', s, count=1)
return s