Python 如何循环一个字符串并返回一个新字符串,该字符串在特定字符处停止

Python 如何循环一个字符串并返回一个新字符串,该字符串在特定字符处停止,python,string,python-3.x,Python,String,Python 3.x,在中断2年后重新进入Python。不记得从一个字符串开始循环并在某个字符处停止,然后返回该字符串的最佳方法 def my_string(long_string, char): newstr = " " for i in range(len(long_string)): if long_string[i] == char: # now what? 我知道我需要创建一个新字符串,然后启动一个循环来遍历现有字符串。但后来我被卡住了。我知道我需要返

在中断2年后重新进入Python。不记得从一个字符串开始循环并在某个字符处停止,然后返回该字符串的最佳方法

def my_string(long_string, char):

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

我知道我需要创建一个新字符串,然后启动一个循环来遍历现有字符串。但后来我被卡住了。我知道我需要返回新字符串,但不确定我的代码的其余部分应该是什么样子。提前感谢你的帮助

使用字符串片段来获取所需的字符串部分。根据您的描述,听起来您希望该字符第一次出现之前的所有字符都正确吗

举个例子。调整索引以获得所需字符串的部分

长字符串[0:i]


如果字符串中不存在目标字符而不捕获异常,则包含使用.index()的答案将无法正常工作。

如果只想从长字符串的开头获取子字符串直到某个字符,则可以执行以下操作:

>>> ch = 'r'
>>> s = 'Hello, world!'
>>> print(s[:s.find(ch)])
#  Hello, wo

如果停止字符肯定在字符串中,您可以使用
.index()
,它将在括号和切片中查找第一次出现的内容的索引
[]

string = "hello op"
stopchar = " "

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

#newstr = "hello"
如果不确定停止字符是否在字符串中,则应使用
.find()
,如果未找到该字符,则不会引发错误:

newstr = string[:string.find(stopchar)]
如果您不希望在第一个字符处停止,并且希望在停止字符之前获得所有单词,您可以使用以下列表:

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

['hello', 'hello op']

您可以创建一个包含字符串中每个字符的列表,并在列表中循环

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

print(newStr)

然后您可以循环浏览列表以满足您的条件

我认为
拆分
索引
(如果未找到字符则返回错误)或
查找
(如果未找到字符则返回-1)效果更好


说明:
拆分
。通过返回第一项,这将完全按照指定的方式工作

字符串中的某个字符有保证吗?您想在新字符串中包含某个字符还是在它之前停止?您可以在python中的字符串上找到索引,无需首先将其转换为列表。在这种情况下,您可能需要返回整个字符串。写
除了ValueError
会稍微好一点这不适用于ch不在s中的情况:
c,s='r','Who fwamed wodgew wabit?';s[:s.find(c)]
给出:
“谁给了wodgew wabit”
(注意缺少的问号)。。。
mystr = raw_input("Input: ")
newStr = list(mystr)

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