如何在 Python 中获取字符串的子字符串?[重复]

2024-12-03 08:45:00
admin
原创
208
摘要:问题描述:我想从第三个字符到字符串末尾获取一个新字符串,例如myString[2:end]。如果省略第二部分意味着“到最后”,如果省略第一部分,它是否从头开始?解决方案 1:>>> x = "Hello World!" >>> x[2:] 'llo Wo...

问题描述:

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


解决方案 1:

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

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

解决方案 2:

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

some_string[::-1]

或者选择替代角色将是:

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

在字符串中向前和向后移动的能力与从开始或结束进行数组切片的能力保持一致。

解决方案 3:

Substr() 通常(即 PHP 和 Perl)的工作方式如下:

s = Substr(s, beginning, LENGTH)

所以参数为beginningLENGTH

但 Python 的行为有所不同;它需要 beginning 和 END 之后的一个 (!)。初学者很难发现这一点。因此,Substr(s, beginning, LENGTH) 的正确替换是

s = s[ beginning : beginning + LENGTH]

解决方案 4:

实现此目的的常见方法是通过字符串切片。

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

解决方案 5:

这里似乎缺少一个例子:完整(浅)复制。

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

这是创建序列类型(而非驻留字符串)副本的常用习惯用法。[:]浅复制列表,请参阅Python 列表切片语法,其使用原因不明显

解决方案 6:

有没有办法在 Python 中对字符串进行子串处理,以从第 3 个字符到字符串末尾获取一个新字符串?

也许喜欢myString[2:end]

是的,如果您将名称分配或绑定end到常量单例,这实际上会起作用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,切片默认使用1step。如果你使用负整数 step,Python 会很聪明地从末尾转到开头。

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

我在回答“解释切片符号问题”时详细解释了切片符号。

解决方案 7:

text = "StackOverflow"
#using python slicing, you can get different subsets of the above string

#reverse of the string
text[::-1] # 'wolfrevOkcatS' 

#fist five characters
text[:5] # Stack'

#last five characters
text[-5:] # 'rflow'

#3rd character to the fifth character
text[2:5] # 'ack'

#characters at even positions
text[1::2] # 'tcOefo'

解决方案 8:

我想对讨论补充两点:

  1. 您可以None在空白处使用来指定“从开始”或“到结束”:

'abcde'[2:None] == 'abcde'[2:] == 'cde'

这在函数中特别有用,因为你不能提供空格作为参数:

def substring(s, start, end):
    """Remove `start` characters from the beginning and `end` 
    characters from the end of string `s`.

    Examples
    --------
    >>> substring('abcde', 0, 3)
    'abc'
    >>> substring('abcde', 1, None)
    'bcde'
    """
    return s[start:end]
  1. Python 有切片对象:

idx = slice(2, None)
'abcde'[idx] == 'abcde'[2:] == 'cde'

解决方案 9:

除了“end”之外,其他都正确。这称为切片符号。您的示例应为:

new_sub_string = myString[2:]

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

解决方案 10:

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 '


解决方案 11:

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

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

myString[2:][:999999]

它有效 - 没有引发错误,并且没有发生默认的“字符串填充”。

解决方案 12:

好吧,我遇到过需要将 PHP 脚本翻译成 Python 的情况,其中有很多用法substr(string, beginning, LENGTH)

如果我选​​择 Python,string[beginning:end]我将不得不计算大量的结束索引,所以更简单的方法是使用string[beginning:][:length],它为我省去了很多麻烦。

解决方案 13:

也许我错过了,但我无法在这个页面上找到原始问题的完整答案,因为这里没有进一步讨论变量。所以我不得不继续搜索。

由于我还没有被允许发表评论,所以我在这里补充我的结论。我确信在访问此页面时,我不是唯一对此感兴趣的人:

 >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'

如果你离开第一部分,你会得到

 >>>myString[:end]
 'Hello' 

如果你也把 : 留在中间,你就会得到最简单的子字符串,也就是第 5 个字符(从 0 开始计数,因此在这种情况下是空白):

 >>>myString[end]
 ' '

解决方案 14:

使用硬编码索引本身可能会造成混乱。

为了避免这种情况,Python 提供了一个内置对象slice()

string = "my company has 1000$ on profit, but I lost 500$ gambling."

如果我们想知道我还剩下多少钱。

正常解决方法:

final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500

使用切片:

EARNINGS = slice(15, 19)
LOSSES = slice(43, 46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500

使用切片可以提高可读性。

解决方案 15:

a="Helloo"
print(a[:-1])

在上面的代码中,[:-1] 声明从开始打印直到最大限制-1。

输出 :

>>> Hello

注意:这里 [:-1] 也与 [0:-1] 和 [0:len(a)-1] 相同

a="I Am Siva"
print(a[2:])

输出:

>>> Am Siva

在上面的代码中,[2:] 声明从索引 2 到最后一个元素打印。

请记住,如果您将打印字符串的最大限制设置为 (x),那么它将打印字符串直到 (x-1),并且请记住列表或字符串的索引始终从 0 开始。

解决方案 16:

我有一个更简单的解决方案,使用for 循环在字符串中查找给定的子字符串。假设我们有两个字符串变量,

main_string = "lullaby"
match_string = "ll"

如果你想检查给定的匹配字符串是否存在于主字符串中,你可以这样做,

match_string_len = len(match_string)
for index,value in enumerate(main_string):
    sub_string = main_string[index:match_string_len+index]
    if sub_string == match_string:
       print("match string found in main string")
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3998  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2749  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   85  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   96  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   83  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用