स्ट्रिंग में अग्रणी और अनुगामी शून्य कैसे निकालें? अजगर


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'?
चार्ल्स

7
@ घर: हाँ! मुझे बस एक ही समस्या थी, और आप यह कर सकते हैं s.strip("0") or "0": यदि आपकी स्ट्रिंग खाली स्ट्रिंग में बदल जाती है, तो यह उसके Falseद्वारा मूल्यांकन किया जाएगा या वांछित स्ट्रिंग द्वारा बदल दिया जाएगा"0"
tarulen

@ पियरे जीएम धन्यवाद। यह वास्तव में मदद करता है और यह बहुत सरल है। इसे उकेरा गया
गुप्त

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 ]

आपके उत्तर के लिए धन्यवाद। यह वास्तव में मदद करता है। मैंने इसे उकेरा है
विशव गुप्ता

7

आप बस एक बूल के साथ ऐसा कर सकते हैं:

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

   number = int(number)

else:

   number = float(number)

2
alphanumeric0000ओपी के अनुरोध के अनुसार काम नहीं करता है ।
कार्ल रिक्टर


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

मान लें कि आपकी सूची में अन्य डेटा प्रकार (और न केवल स्ट्रिंग) हैं, यह प्रयास करें। यह तारों से ट्रेलिंग और अग्रणी शून्य को हटाता है और अन्य डेटा प्रकारों को अछूता छोड़ देता है। यह भी विशेष मामले को संभालता है = '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']
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.