কীভাবে একটি স্ট্রিংয়ে শীর্ষস্থানীয় এবং অনুসরণীয় শূন্যগুলি সরিয়ে ফেলবেন? পাইথন


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"
টারুলেন

@ পিয়ার জিএম আপনাকে ধন্যবাদ। এটি সত্যই সহায়তা করে এবং এটি খুব সহজ। এটি উত্সাহিত
বিশ্ব গুপ্ত

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 ]

আপনার উত্তরের জন্য ধন্যবাদ. এটা সত্যিই সাহায্য। আমি এটিকে
উন্নত



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.