पायथन का उपयोग करके एक स्ट्रिंग से एक चरित्र को कैसे हटाया जाए


458

उदाहरण के लिए, एक स्ट्रिंग है। EXAMPLE

मैं बीच के चरित्र को कैसे हटा सकता हूं, अर्थात Mइससे? मुझे कोड की आवश्यकता नहीं है। मैं जानना चाहता हूँ:

  • क्या पायथन में तार किसी विशेष चरित्र में समाप्त होते हैं?
  • कौन सा बेहतर तरीका है - मध्य चरित्र से शुरू होने वाली दाईं ओर सब कुछ स्थानांतरित करना या नए स्ट्रिंग का निर्माण करना और मध्य चरित्र की नकल नहीं करना?

जवाबों:


639

पायथन में, तार अपरिवर्तनीय हैं, इसलिए आपको एक नया स्ट्रिंग बनाना होगा। आपके पास नई स्ट्रिंग बनाने के कुछ विकल्प हैं। यदि आप 'एम' को हटाना चाहते हैं तो यह कहीं भी दिखाई देगा:

newstr = oldstr.replace("M", "")

यदि आप केंद्रीय वर्ण हटाना चाहते हैं:

midlen = len(oldstr)/2   # //2 in python 3
newstr = oldstr[:midlen] + oldstr[midlen+1:]

आपने पूछा कि क्या तार एक विशेष चरित्र के साथ समाप्त होते हैं। नहीं, आप सी प्रोग्रामर की तरह सोच रहे हैं। पायथन में, तार अपनी लंबाई के साथ संग्रहीत होते हैं, इसलिए किसी भी बाइट मूल्य, सहित \0, एक स्ट्रिंग में दिखाई दे सकता है।


16
यह देखते हुए कि प्रश्नकर्ता अजगर के लिए बिल्कुल नया है, यह ध्यान देने योग्य हो सकता है कि संस्करण 2.X अजगर में "/" ऑपरेटर एक पूर्णांक (शून्य की ओर छोटा) देता है, संस्करण 3.X में अजगर को "//" का उपयोग करना चाहिए। बजाय। इसके अलावा, from __future__ import divisionआपकी स्क्रिप्ट की शुरुआत में लाइन संस्करण 3.X पायथन एक्ट को संस्करण 3.X
माइकल डन

1
ध्यान दें कि यदि "M" लाइन की एकमात्र सामग्री है, तो "" अपने स्थान पर एक खाली लाइन को पीछे छोड़ देता है।
8bitjunkie

1
@ 7SpecialGems यह पूरी तरह से निर्भर करता है कि आप इस स्ट्रिंग के साथ क्या करते हैं। एक खाली स्ट्रिंग की तरह ""एक खाली लाइन का मतलब नहीं है। यदि आप इसे एक सूची में रखते हैं, और इसे नई सुर्खियों में शामिल करते हैं, तो यह एक खाली रेखा बना देगा, लेकिन बहुत सी अन्य जगहें हैं जो आप एक खाली स्ट्रिंग का उपयोग कर सकते हैं जो ऐसा नहीं करेगा।
नेड बाचेल्डर

68

यह शायद सबसे अच्छा तरीका है:

original = "EXAMPLE"
removed = original.replace("M", "")

पात्रों और इस तरह के स्थानांतरण के बारे में चिंता मत करो। अधिकांश पायथन कोड अमूर्तता के उच्च स्तर पर होता है।


6
Mअद्वितीय नहीं हो सकता है। उस स्थिति में, यह सभी Ms, सही की जगह लेगा ?
लेज़र

14
हाँ, यह सही है। यदि आप केवल nघटनाओं को प्रतिस्थापित करना चाहते हैं , तो उपयोग करें original.replace("M", "", n)
पुनरावर्ती

1
@ S.Lott मैंने लिया कि बयानबाजी करने के लिए, केवल एक उदाहरण के बदले समाधान प्रदान करने का सुझाव देने के लिए
Dodgie

63

एक विशिष्ट स्थान बदलने के लिए:

s = s[:pos] + s[(pos+1):]

एक विशिष्ट चरित्र को बदलने के लिए:

s = s.replace('M','')

18
हालांकि यह काम कर सकता है, मुझे लगता है कि पहले भाग में क्या चल रहा है, यह बताकर आपके उत्तर को बेहतर बनाया जा सकता है, क्योंकि बिना किसी स्पष्टीकरण के पायथन नौसिखिया के लिए प्रतिस्थापन संचालन आवश्यक नहीं है।
जूलबर्ट

तो अगर एस की लंबाई है l। फिर पहले भाग के लिए, पॉज़ के लिए बाधा होनी चाहिए l-1 > pos >= 0
हॉयु चेन

s [: pos] को 0 से pos-1 और s [(pos + 1) से प्रतिस्थापित किया जाता है:] pos + 1 से अंत तक प्रतिस्थापित किया जाता है। इसलिए, यह s से [s] हटाता है।
एस। सुरेश

इसकी जगह नहीं, यह गिर रहा है। अपने प्रमुख चयन विधि द्वारा अलग किए गए दो प्रमुख उपयोग मामलों के लिए उदाहरण प्रदान करके ऑपरेशन को अलग करना अच्छा है।
अलेक्जेंडर स्टोहर

28

तार अपरिवर्तनीय हैं। लेकिन आप उन्हें एक सूची में बदल सकते हैं, जो कि परिवर्तनशील है, और फिर आपने इसे बदलने के बाद सूची को वापस स्ट्रिंग में परिवर्तित कर दिया है।

s = "this is a string"

l = list(s)  # convert to list

l[1] = ""    # "delete" letter h (the item actually still exists but is empty)
l[1:2] = []  # really delete letter h (the item is actually removed from the list)
del(l[1])    # another way to delete it

p = l.index("a")  # find position of the letter "a"
del(l[p])         # delete it

s = "".join(l)  # convert back to string

आप एक नया स्ट्रिंग भी बना सकते हैं, जैसा कि दूसरों ने दिखाया है, मौजूदा स्ट्रिंग से आप जो चरित्र चाहते हैं, उसे छोड़कर सब कुछ ।


4
आप सिर्फ str.replaceविधि का उपयोग क्यों नहीं करेंगे ?
एलिकैड्री 16

12

मैं बीच के चरित्र को कैसे हटा सकता हूं, अर्थात, इसमें से एम?

आप नहीं कर सकते, क्योंकि पायथन में तार अपरिवर्तनीय हैं

क्या पायथन में तार किसी विशेष चरित्र में समाप्त होते हैं?

नहीं। वे पात्रों की सूची के समान हैं; सूची की लंबाई स्ट्रिंग की लंबाई को परिभाषित करती है, और कोई भी चरित्र टर्मिनेटर के रूप में कार्य नहीं करता है।

कौन सा बेहतर तरीका है - मध्य चरित्र से शुरू होने वाली दाईं ओर सब कुछ स्थानांतरित करना या नए स्ट्रिंग का निर्माण करना और मध्य चरित्र की नकल नहीं करना?

आप मौजूदा स्ट्रिंग को संशोधित नहीं कर सकते हैं, इसलिए आपको मध्य चरित्र को छोड़कर सब कुछ युक्त एक नया बनाना होगा।


11

translate()विधि का प्रयोग करें :

>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'

3
तरीका बदल गया है। पायथन 3 के लिए डॉक्स देखें: अनुवाद करें ( यह स्थान के साथ अलग-अलग वर्णों को बदलता है ( Noneनिकालने के लिए काम नहीं करता है):translate( str.maketrans("<>", " ") )
संभालें

1
दरअसल, डॉक्स ने पायथन 3 में अनुवाद () के साथ विभिन्न वर्णों को हटाने के दो तरीके निर्दिष्ट किए हैं: str.maketrans( "", "", "<>")औरstr.maketrans( {"<":None,">":None })
हैंडल करें

3
उत्तर में कोड के बराबर यह python3 में हो गया:'EXAMPLE'.translate({ord("M"): None})
yoniLavi


6
card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)

किसी वर्ण को एक स्ट्रिंग से कैसे निकालें: यहाँ एक उदाहरण है जहाँ एक स्ट्रिंग में वर्णों के रूप में दर्शाए गए कार्डों का ढेर है। उनमें से एक तैयार किया गया है (random.choice () फ़ंक्शन के लिए यादृच्छिक मॉड्यूल आयात करें, जो स्ट्रिंग में एक यादृच्छिक चरित्र चुनता है)। एक नया स्ट्रिंग, कार्डसॉफ्ट, स्ट्रिंग फ़ंक्शन द्वारा दिए गए शेष कार्डों को रखने के लिए बनाया गया है () जहां अंतिम पैरामीटर इंगित करता है कि केवल एक "कार्ड" को खाली स्ट्रिंग द्वारा प्रतिस्थापित किया जाना है ...


6
def kill_char(string, n): # n = position of which character you want to remove
    begin = string[:n]    # from beginning to n (n not included)
    end = string[n+1:]    # n+1 through end of string
    return begin + end
print kill_char("EXAMPLE", 3)  # "M" removed

मैंने इसे यहां कहीं देखा है


4

यहाँ मैं "एम" बाहर टुकड़ा करने के लिए क्या किया है:

s = 'EXAMPLE'
s1 = s[:s.index('M')] + s[s.index('M')+1:]

2
यह केवल इस विशिष्ट स्ट्रिंग को काम करेगा और सामान्य समाधान नहीं है।
एंड्रियास बर्गस्ट्रॉम

3

यदि आप किसी स्ट्रिंग में वर्णों को हटाना / अनदेखा करना चाहते हैं, और, उदाहरण के लिए, आपके पास यह स्ट्रिंग है,

"[11: एल: 0]"

एक वेब एपीआई प्रतिक्रिया या सीएसवी फ़ाइल की तरह कुछ ऐसा है, मान लीजिए कि आप अनुरोधों का उपयोग कर रहे हैं

import requests
udid = 123456
url = 'http://webservices.yourserver.com/action/id-' + udid
s = requests.Session()
s.verify = False
resp = s.get(url, stream=True)
content = resp.content

पाश और अवांछित आकर्षण से छुटकारा पाएं:

for line in resp.iter_lines():
  line = line.replace("[", "")
  line = line.replace("]", "")
  line = line.replace('"', "")

वैकल्पिक विभाजन, और आप व्यक्तिगत रूप से मूल्यों को पढ़ने में सक्षम होंगे:

listofvalues = line.split(':')

अब प्रत्येक मूल्य तक पहुँच आसान है:

print listofvalues[0]
print listofvalues[1]
print listofvalues[2]

यह छपेगा

1 1

एल

0


3

एक charया एक sub-string बार (केवल पहली घटना) को हटाने के लिए :

main_string = main_string.replace(sub_str, replace_with, 1)

नोट: यहां 1आप जिस भी intघटना को बदलना चाहते हैं, उसकी संख्या के साथ प्रतिस्थापित किया जा सकता है ।


3

आप बस सूची समझ का उपयोग कर सकते हैं।

मान लें कि आपके पास स्ट्रिंग है: my name isऔर आप चरित्र को निकालना चाहते हैं m। निम्नलिखित कोड का उपयोग करें:

"".join([x for x in "my name is" if x is not 'm'])

0
from random import randint


def shuffle_word(word):
    newWord=""
    for i in range(0,len(word)):
        pos=randint(0,len(word)-1)
        newWord += word[pos]
        word = word[:pos]+word[pos+1:]
    return newWord

word = "Sarajevo"
print(shuffle_word(word))

2
हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है।
andreas

0

एक अन्य तरीका एक फ़ंक्शन के साथ है,

नीचे एक स्ट्रिंग से सभी स्वरों को हटाने का एक तरीका है, बस फ़ंक्शन को कॉल करके

def disemvowel(s):
    return s.translate(None, "aeiouAEIOU")

-7

पायथन में स्ट्रिंग्स अपरिवर्तनीय हैं, इसलिए आपके दोनों विकल्पों का मूल रूप से एक ही मतलब है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.