Python 是否可以使用子字符串而不必将其存储在单独的变量中
我希望能够检查字符串中的第一个子字符串:Python 是否可以使用子字符串而不必将其存储在单独的变量中,python,string,Python,String,我希望能够检查字符串中的第一个子字符串:random\u string=“fox is bright orange”是什么,而无需拆分字符串,然后从列表中读取,或者将其存储到其他变量中。有可能这样做吗 我在这里使用的字符串只是一个示例,因此没有使用指定的字符串。我希望能够计算出任何字符串的子字符串(如果它被')而不必使用列表您可以使用切片: In [1]: s = "fox is bright orange" In [2]: s[4:7] Out[2]: 'is ' In [3]: s[4:
random\u string=“fox is bright orange”
是什么,而无需拆分字符串,然后从列表中读取,或者将其存储到其他变量中。有可能这样做吗
我在这里使用的字符串只是一个示例,因此没有使用指定的字符串。我希望能够计算出任何字符串的子字符串(如果它被'
)而不必使用列表您可以使用切片:
In [1]: s = "fox is bright orange"
In [2]: s[4:7]
Out[2]: 'is '
In [3]: s[4:13]
Out[3]: 'is bright'
In [4]: s[4:]
Out[4]: 'is bright orange'
In [6]: s[:6]
Out[6]: 'fox is'
在较低级别的语言(如C)中,可以在原始字符串上使用带有仲裁的指针。所以你可以用切片来复制这种行为。但是请注意,python无论如何都会返回一个副本,因为python字符串是不可变的。所以您希望从
获取fox
,fox是亮橙色的
:
In [61]: re.search(r'^\w+', random_string).group()
Out[61]: 'fox'
str.partition
(生成元组)并获取第一个元素
In [62]: random_string.partition(' ')[0]
Out[62]: 'fox'
在Python中执行所需操作的正确方法正是您试图避免的方法。没有真正的理由这样做 但是。。。如果你绝对不想使用列表,你可以这样做
sub_string = random_string[:random_string.index(' ')]
请注意,如果字符串中没有空格,这将引发异常。是否要检查给定字符串是否以某个单词开头
random_string = "fox is bright orange"
print(random_string.startswith("fox ") # True
是否要获取第一个单词的长度
random_string = "fox is bright orange"
print(random_string.index(" ")) # 3
你想得到第一个单词,但不分割其他单词吗
random_string = "fox is bright orange"
print(random_string[:random_string.index(" ")]) # fox
请注意,str.index()
在找不到指定的子字符串时,即当字符串中只有一个单词时,会引发ValueError
,因此如果使用最后两种解决方案之一,则应捕获该错误并执行适当的操作(例如使用整个字符串)
或者您可以使用
str.find()
。如果找不到子字符串,则返回-1,您必须以稍微不同的方式进行处理。如果您不想使用re,对随机字符串进行简单迭代如何
def get_first_word(long_string):
offset = 0
while long_string[offset] !=" ":
offset+=1
return long_string[0:offset]
因此,运行此代码:
random_string = "fox is bright orange"
print(get_first_word(random_string))
将打印-fox
此
''.join(iter(iter(s).__next__, ' '))
无论字符串中是否实际存在“
”,都将起作用。你说的“第一个子字符串”是什么意思?为什么,为什么不想使用列表?为什么要尽量减少使用的变量数?你能举一个你认为变量太多的代码的例子吗?这个问题是一个我从未见过的问题@DanielPryden Op对处理整个字符串的担忧是正确的,如果他需要百万字母字符串中的前三个字母(如果这是唯一的担忧)。当然,我无法解释问题的其余部分,我不知道。有没有办法做到这一点,这样我就不必知道字符串的大小来确定我需要什么了。因为字符串将不同,并且不会使用相同的字符位置。请提供一个示例输入和所需的输出?因为有很多方法可以做到这一点,而你的问题还不够清楚。请编辑。你能解释一下正则表达式是如何工作的吗?我有点confused@exemplarary添加了解释。请注意,如果有人希望在不进行错误处理的情况下执行此操作(无论出于何种原因),这应该可以使用random\u string[:(random\u string+))。index(“”)
(在搜索的末尾添加空格)。我试图避免创建新字符串,因为这似乎很重要,但您是对的,我经常使用这种方法。你当然是对的,因为创建新字符串很昂贵。这种方法适用于更喜欢“我喜欢小巧、聪明的Python一行程序”的人。这在某些情况下仍然是合法的:)我想,如果字符串恰好是《大英百科全书》,就可以避免使用该列表。我认为在内存中加载4gb字符串,然后用它列出一个列表没有任何问题。
''.join(iter(iter(s).__next__, ' '))