如何在 Python 中获取字符串的子字符串?

问:

我想得到一个从第三个字符到字符串末尾的新字符串,例如myString[2:end]。如果省略第二部分意味着“直到最后”,如果省略第一部分,它是否从头开始?

答1:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

Python 将此概念称为“切片”,它不仅仅适用于字符串。查看 here 以获得全面的介绍。

答2:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

只是为了完整性,因为没有其他人提到它。数组切片的第三个参数是一个步骤。所以反转一个字符串很简单:

some_string[::-1]

或者选择替代字符是:

"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"

通过字符串向前和向后步进的能力与能够从开头或结尾排列切片保持一致。

@mtahmed 与问题绝对相关。如果您想通过从字符串中选择替代字符来进行子字符串化怎么办?那将是 my_string[::2]

我认为您更有可能想提及切片的第三个参数。需要从字符串中获取所有其他字符可能是某个地方的重要用例,但我从来没有这样做过。并不是说想要炫耀你所知道的有什么不对——如果你不能那样做,那么了解事情的意义何在。 :) 但是与问题相关的情况被夸大了。

当然,选择替代字符的具体示例可能与问题无关,但理解切片的第三个参数非常相关,简单的示例用于说明它是如何工作的。 Python 社区在以友好的方式教育新成员方面也有着悠久的历史 :-)

很明显,如果你把 some_string[::-1] 你回来了,字符串的顺序是相反的。但是,我真的不明白你在这种情况下用其他数字做什么?例如:test_string[5:1:-1] - 会产生与我预期完全不同的方式。如果第三个数字是“-1”,第一个和第二个数字将如何影响字符串?

答3:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

Substr() 通常(即 PHP 和 Perl)以这种方式工作:

s = Substr(s, beginning, LENGTH)

所以参数是beginning和LENGTH。

但是 Python 的行为是不同的;它期望开始和 END (!) 之后的一个。这是初学者很难发现的。所以 Substr(s, beginning, LENGTH) 的正确替换是

s = s[ beginning : beginning + LENGTH]

初学者在迁移到python时应该学习pythonic方式,不要拘泥于其他语言习惯

为了完整起见,Java 与 Python 的相似之处在于 String.substring() 方法需要开始和过去结束。这个让我很难受,我以为它是世界上所有其他子字符串函数的长度。

一种(可能)更pythonic的方法是s[beginning:][:length]

作为一个开始使用 Python 而不是像 PHP 这样的 [脏字] 语言的人,我认为 Python 的字符串 [beginning:end] 更加简单和直观。长度通常无关紧要。

@PhilHibbs“像所有其他子字符串函数一样”的声明太强了,因为至少有 两种 其他常用方法来解释子字符串参数。一个是 (start, length),另一个是 (start, end)。 Python 的 (start, end+1) 无疑是不寻常的,但与 Python 中其他事物的工作方式非常吻合。

答4:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

实现此目的的常用方法是字符串切片。

MyString[a:b] 为您提供从索引 a 到 (b – 1) 的子字符串。

答5:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

这里似乎缺少一个示例:完整(浅)副本。

>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>

这是创建序列类型(不是内部字符串)副本的常用习惯用法,[:]。浅拷贝列表,请参阅 Python list slice syntax used for no obvious reason。

这几乎与关于子字符串的问题无关。甚至不适用于字符串。说 stringA = stringB 就足够了......

[:] 完整副本创建一个新副本,使用切片语法并被读取为“从头到尾的子字符串”

既然字符串是不可变的,那有什么意义呢? a=b 应该足够了。

@gimel:实际上,不可变类型的 [:] 根本不会复制。虽然当 mysequence 是像 str、tuple、bytes (Py3) 或 unicode (Py2) 这样的不可变类型时,mysequence[:] 基本上是无害的,但 a = b[:] 等价于 a = b,它只是浪费了一点时间来调度对象通过返回自身来响应的切片字节码,因为它对浅拷贝毫无意义,除了对象身份测试之外,它相当于只返回另一个对一个不可变自我的引用。

试图总结对这个答案的其他批评:在 Python 中,字符串是不可变的,因此没有理由复制字符串 - 所以 s[:] 根本不复制:s = 'abc'; s0 = s[:]; assert s is s0。是的,这是在 Python 中复制列表直到列表获得 list.copy 的惯用方式,但是不可变类型的完整切片没有理由进行复制,因为它无法更改,所以可能只有一个在内存中,我们不应该浪费时间复制它。由于这个答案是错误的并且甚至没有回答问题 - 是否应该将其删除?

答6:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

有没有办法在 Python 中对字符串进行子串化,以获取从第 3 个字符到字符串末尾的新字符串?也许像 myString[2:end]?

是的,如果您将名称 end 分配或 bind 分配给常量单例 None,这实际上是有效的:

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

切片表示法有 3 个重要参数:

开始

停止

未给出时它们的默认值为 None – 但我们可以显式传递它们:

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

如果离开第二部分意味着“直到最后”,如果你离开第一部分,它是否从头开始?

是的,例如:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

请注意,我们在切片中包含了开始,但我们只上升到停止,而不包括停止。

当 step 为 None 时,切片默认使用 1 作为 step。如果你使用负整数,Python 足够聪明,可以从头到尾。

>>> myString[::-1]
'0987654321'

我在 my answer to Explain slice notation Question. 中详细解释了切片符号

答7:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

除了“结束”之外,你已经得到了它。它被称为切片符号。您的示例应为:

new_sub_string = myString[2:]

如果省略第二个参数,则它隐含地是字符串的结尾。

答8:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

我想在讨论中补充两点:

您可以在空白处使用 None 来指定“从开始”或“到结束”: ‘abcde’[2:None] == ‘abcde’[2:] == ‘cde’ 这在函数,其中不能提供空格作为参数: def substring(s, start, end): “”“从字符串 s 的开头删除 start 字符和 end 字符。示例 ——– >>> substring(‘abcde’, 0, 3) ‘abc’ >>> substring(‘abcde’, 1, None) ‘bcde’ “”” return s[start:end ] Python 有切片对象: idx = slice(2, None) ‘abcde’[idx] == ‘abcde’[2:] == ‘cde’

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

答9:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

如果 myString 包含从偏移量 6 开始且长度为 9 的帐号,那么您可以通过以下方式提取帐号:acct = myString[6:][:9]。

如果 OP 接受这一点,他们可能想以实验方式尝试,

myString[2:][:999999]

它有效 – 不会引发错误,也不会发生默认的“字符串填充”。

我认为如果您想在 OP 的情况下使用此方法 myString[offset:][:length],您可以使用 myString[offset:][:]

@VictorVal 答案适用于那些(像我一样)已经将 Python 作为第二(第三、第四、...)编程语言并希望使用一些熟悉的“语法钩子”来接近该语言的人。该语言的任何专家很可能会认为我的回答有点愚蠢。

像这样的答案应该被标记为删除吗?其他答案更好地解释了类似的解决方案,看到这个让我挠头并查找 python 几分钟,然后才意识到这只是那种类型的答案。

答10:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

好吧,我遇到了需要将 PHP 脚本翻译成 Python 的情况,它有很多 substr(string, beginning, LENGTH) 的用法。如果我选择 Python 的 string[beginning:end],我必须进行大量计算 的结束索引,所以更简单的方法是使用 string[beginning:][:length],它为我省去了很多麻烦。

答11:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

str1='There you are'
>>> str1[:]
'There you are'

>>> str1[1:]
'here you are'

#To print alternate characters skipping one element in between

>>> str1[::2]
'Teeyuae'

#To print last element of last two elements
>>> str1[:-2:-1]
'e'

#Similarly
>>> str1[:-2:-1]
'e'


#Using slice datatype

>>> str1='There you are'
>>> s1=slice(2,6)
>>> str1[s1]
'ere '



我喜欢你列出选项的方法。不过,您的两个选项似乎相同?

原文链接:https://www.huntsbot.com/qa/2VrD/how-do-i-get-a-substring-of-a-string-in-python?lang=zh_CN&from=csdn

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年3月11日
下一篇 2023年3月11日

相关推荐