2017-08-28 23 views
4

2年後にPythonに戻ります。文字列を最初からループし、特定の文字で停止してから文字列を返す最善の方法を覚えていない。文字列をループして特定の文字で終了する新しい文字列を返す方法

def my_string(long_string, char): 

    newstr = " " 
    for i in range(len(long_string)): 
     if long_string[i] == char: 
      # now what? 

私は新しい文字列を作成し、既存の文字列を通過するループを開始する必要があります知っています。しかし、それから私は立ち往生します。私は新しい文字列を返す必要があることを知っていますが、残りのコードはどのように見えるのでしょうか。あなたの助けを前にありがとう。

+0

は、その文字列で_certain character_が保証されていますか?特定の文字を新しい文字列に含めるか、その直前で停止しますか? –

答えて

1

は、あなただけの次の操作を行うことができますあなたはストップchの場合は、わからない場合はカッコ内のものが最初に出現する位置のインデックスと[]

string = "hello op" 
stopchar = " " 

newstr = string[:string.index(stopchar)] 

#newstr = "hello" 

をスライスを見つけなる.index()を使用することができますaracterは、それが文字が見つからない場合は、エラーは発生しません.find()を使用する必要があり、文字列である:

newstr = string[:string.find(stopchar)] 

あなたが最初の文字で停止し、前にすべての単語を取得したいしたくない場合ストップキャラクタあなたはこのリストの内包表記を使用することができます。

string2 = "hello op today" 
strings = [string2[:i] for i,c in enumerate(string2) 
      if c == stopchar] 
print (strings) 

結果:あなたは、文字列やループのthro内の各文字を含むリストを作成することができ

['hello', 'hello op'] 
+1

これは、chがsにない場合には機能しません。 'c、s = 'r'、 'who wwged wodgew wabit?'; '[s.find(c)]' 'は次のようになります:' '誰がwodgew wabitをfwamedしましたか? '(欠落した疑問符に注意してください)... – agtoever

1

文字列スライスを使用して、必要な文字列の部分を取得します。あなたの説明から、その文字の最初の出現までのすべての文字が正しいように思えますか?

たとえば、これを試してください。インデックスを微調整して、必要な文字列の部分を取得します。対象の文字が例外をキャッチすることなく、文字列内に存在しない場合

long_string[0:i]

.INDEX(の使用を含む答えは)うまく動作しません。ストップ文字が文字列に間違いである場合

>>> ch = 'r' 
>>> s = 'Hello, world!' 
>>> print(s[:s.find(ch)]) 
# Hello, wo 
1
try: 
    print d[:d.index('y')] 
except ValueError: 
    print d 
+0

あなたはたぶんその場合に文字列全体を返したいと思うでしょう。そして、「ValueErrorを除いて」と書いても、ちょっと良いかもしれません。 –

+0

ありがとう、編集しました。 – akp

0

:あなただけの特定の文字までの長い文字列の先頭から部分文字列を取得したい場合は

0

ughリスト。

mystr = raw_input("Input: ") 
newStr = list(mystr) 

print(newStr) 

次に、あなたがリストをちょうどループあなたの条件

+0

Pythonで文字列を検索するだけで、最初にリストに変換する必要はありません。 –

0

を満たすことができ、私は戻って(splitindexより良い作品だと思う(文字が見つからない場合はエラーを返す)またはfind -1文字が見つからない場合)。

>>> s,c='Who fwamed wodgew wabit?','w' 
>>> s.split(c)[0] 
'Who f' 
>>> c='r' 
>>> s.split(c)[0] 
'Who fwamed wodgew wabit?' 

説明:splitreturns a list of the words in the string, using sep as the delimiter string。最初の項目を返すことで、これは指定されたとおりに動作します。

関連する問題