web-dev-qa-db-ja.com

文字列の先頭と末尾のゼロを削除する方法は? Python

私はこれらのようないくつかの英数字の文字列を持っています

listOfNum = ['000231512-n','1209123100000-n00000','alphanumeric0000', '000alphanumeric']

末尾ゼロを削除するための望ましい出力は次のとおりです。

listOfNum = ['000231512-n','1209123100000-n','alphanumeric', '000alphanumeric']

先行後続ゼロの望ましい出力は次のとおりです。

listOfNum = ['231512-n','1209123100000-n00000','alphanumeric0000', 'alphanumeric']

先行ゼロと後続ゼロの両方を削除するための出力は、次のとおりです。

listOfNum = ['231512-n','1209123100000-n00000','alphanumeric0000', 'alphanumeric']

今のところ私はそれを次の方法でやっていますが、ある場合はより良い方法を提案してください:

listOfNum = ['000231512-n','1209123100000-n00000','alphanumeric0000', \
'000alphanumeric']
trailingremoved = []
leadingremoved = []
bothremoved = []

# Remove trailing
for i in listOfNum:
  while i[-1] == "0":
    i = i[:-1]
  trailingremoved.append(i)

# Remove leading
for i in listOfNum:
  while i[0] == "0":
    i = i[1:]
  leadingremoved.append(i)

# Remove both
for i in listOfNum:
  while i[0] == "0":
    i = i[1:]
  while i[-1] == "0":
    i = i[:-1]
  bothremoved.append(i)
85
alvas

基本はどうですか

your_string.strip("0")

後続ゼロと先行ゼロの両方を削除するには?末尾のゼロのみを削除する場合は、代わりに.rstripを使用します(先頭のゼロのみに.lstripを使用します)。

[詳細は doc で。]

リスト内包表記を使用して、必要なシーケンスを取得できます。

trailing_removed = [s.rstrip("0") for s in listOfNum]
leading_removed = [s.lstrip("0") for s in listOfNum]
both_removed = [s.strip("0") for s in listOfNum]
186
Pierre GM

先頭と末尾の「0」を削除します。

list = [i.strip('0') for i in listOfNum ]

先頭の「0」を削除します。

list = [ i.lstrip('0') for i in listOfNum ]

末尾の「0」を削除します。

list = [ i.rstrip('0') for i in listOfNum ]
12
fho

あなたは単純にブールでこれを行うことができます:

if int(number) == float(number):

   number = int(number)

else:

   number = float(number)
3
Bjarne

strip() で試しましたか:

listOfNum = ['231512-n','1209123100000-n00000','alphanumeric0000', 'alphanumeric']
print [item.strip('0') for item in listOfNum]

>>> ['231512-n', '1209123100000-n', 'alphanumeric', 'alphanumeric']
3
Cédric Julien

str.stripはこの状況に最適なアプローチですが、 more_itertools.strip は反復可能要素から先頭要素と末尾要素の両方を取り除く一般的なソリューションでもあります。

コード

import more_itertools as mit


iterables = ["231512-n\n","  12091231000-n00000","alphanum0000", "00alphanum"]
pred = lambda x: x in {"0", "\n", " "}
list("".join(mit.strip(i, pred)) for i in iterables)
# ['231512-n', '12091231000-n', 'alphanum', 'alphanum']

詳細

ここで、述語を満たす他の要素から先頭と末尾の"0"sを削除します。このツールは文字列に限定されません。

その他の例については、ドキュメントも参照してください

more_itertools は、> pip install more_itertoolsを介してインストール可能なサードパーティライブラリです。

1
pylang