文字列の先頭と末尾のゼロを削除するにはどうすればよいですか?パイソン


110

このような英数字の文字列がいくつかあります

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-n', 'alphanumeric', '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)

回答:


238

基本はどうですか

your_string.strip("0")

後続ゼロと先行ゼロを削除するには?末尾のゼロを削除することにのみ関心がある場合は、.rstrip代わりに(.lstrip先頭のゼロのみに)を使用してください。

[詳細はドキュメントに記載されています。]

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

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]

2
の特別な場合のために、この答えの賢い調整はありますs = '0'か?
Charles

7
@チャールズ:はい!私は同じ問題を抱えていて、あなたが行うことができますs.strip("0") or "0":文字列が空の文字列に変わった場合、それはまたはと評価さFalseれ、目的の文字列に置き換えられます"0"
tarulen

@Pierre GMありがとうございます。それは本当に役立ち、それは非常に簡単です。賛成票
Vishav Gupta

18

先頭と末尾の「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 ]

ご回答有難うございます。それは本当に役立ちます。私は賛成しています
Vishav Gupta

7

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

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

   number = int(number)

else:

   number = float(number)

2
alphanumeric0000OPが要求したとおりには機能しません。
カールリヒター2016年


1

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"、述語を満たす他の要素の中で先頭と末尾の両方を削除しています。このツールは文字列に限定されません。

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

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


1

リストに他のデータ型(文字列だけでなく)があるとすると、これを試してください。これにより、文字列から後続ゼロと先行ゼロが削除され、他のデータ型はそのまま残ります。これは、特殊なケースs = '0'も処理します

例えば

a = ['001', '200', 'akdl00', 200, 100, '0']

b = [(lambda x: x.strip('0') if isinstance(x,str) and len(x) != 1 else x)(x) for x in a]

b
>>>['1', '2', 'akdl', 200, 100, '0']

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.