Python中的41个字符串操作问题

我开始列出最常用的函数,以解决LeetCode和HackerRank上的算法问题。

成为一名优秀的程序员并不意味着要记住某种语言的所有内置功能。但这并不意味着记住他们是没有用的。特别是在准备面试时。

今天,我想与所有希望我的备忘单一起使用Python字符串的人分享。我将其设计为一个问题列表,用于自测。尽管这些问题没有吸引面试中提供的全面任务,但它们的发展将帮助您解决实际的编程问题。



1.如何检查两个对象的身份?


如果在两个变量中写入了对同一存储区的引用,则 运算符is返回True这就是我们在谈论“物体的身份”时所谈论的。

不要混淆is==操作员==仅检查对象的相等性。

animals           = ['python','gopher']
more_animals      = animals
print(animals == more_animals) #=> True
print(animals is more_animals) #=> True
even_more_animals = ['python','gopher']
print(animals == even_more_animals) #=> True
print(animals is even_more_animals) #=> False

要注意一个事实,即animals它们是even_more_animals不相同的,尽管它们彼此相等。

另外,有一个函数id()返回与变量名关联的内存地址的标识符。调用此函数时,将为两个相同的对象返回相同的标识符。

name = 'object'
id(name)
#=> 4408718312

2.如何检查一行中的每个单词都以大写字母开头?


有一个字符串方法istitle()可以检查字符串中的每个单词是否都以大写字母开头。

print( 'The Hilton'.istitle() ) #=> True
print( 'The dog'.istitle() ) #=> False
print( 'sticky rice'.istitle() ) #=> False

3.如何检查一个字符串中的另一个字符串?


如果该字符串包含搜索字符串in,则会返回 一条语句True

print( 'plane' in 'The worlds fastest plane' ) #=> True
print( 'car' in 'The worlds fastest plane' ) #=> False

4.如何找到字符串中子字符串首次出现的索引?


有两种方法可以返回字符串中第一次出现的子字符串的索引。这是find()index()它们每个都有某些功能。如果未在字符串中找到所需的子字符串,则

该方法find()返回-1

'The worlds fastest plane'.find('plane') #=> 19
'The worlds fastest plane'.find('car') #=> -1

index()在这种情况下的 方法会引发错误ValueError

'The worlds fastest plane'.index('plane') #=> 19
'The worlds fastest plane'.index('car') #=> ValueError: substring not found

5.如何计算字符串中的字符数?


该函数len()返回字符串的长度。

len('The first president of the organization..') #=> 41

6.如何计算一个字符串中某个字符出现了多少次?


count()返回指定字符字符串中出现次数 的方法将帮助我们回答此问题

'The first president of the organization..'.count('o') #=> 3

7.如何将字符串的第一个字符变成大写字母?


为此,可以使用方法capitalize()

'florida dolphins'.capitalize() #=> 'Florida dolphins'

8.什么是f线以及如何使用它们?


Python 3.6引入了一项新功能,即所谓的“ f字符串”。它们的使用大大简化了字符串插值。f线的使用类似于方法的应用format()

声明f线时,在左引号之前写一个字母f

name = 'Chris'
food = 'creme brulee'
f'Hello. My name is {name} and I like {food}.'
#=> 'Hello. My name is Chris and I like creme brulee'

9.如何在字符串的给定部分中找到子字符串?


index()可以通过向该 方法传递可选参数来调用该方法,该参数表示字符串的初始和最终片段的索引,您需要在该索引中搜索子字符串。

'the happiest person in the whole wide world.'.index('the',10,44)
#=> 23

请注意,上述构造返回23,而不是0,这实际上不会限制我们的搜索。

'the happiest person in the whole wide world.'.index('the')
#=> 0

10.如何使用format()方法将变量的内容插入字符串?


该方法format()可以使您获得与使用f线可获得的结果相似的结果。没错,我相信使用起来format()不太方便,因为所有变量都必须指定为arguments format()

difficulty = 'easy'
thing = 'exam'
'That {} was {}!'.format(thing, difficulty)
#=> 'That exam was easy!'

11.我怎么知道一个字符串是否只包含数字?


如果字符串中的所有字符都是数字isnumeric()True 有一种方法可以返回

'80000'.isnumeric() #=> True

使用此方法时,请记住,他不会将标点符号视为数字。

'1.0'.isnumeric() #=> False

12.如何用给定字符分割字符串?


在这里,我们将通过一种方法来帮助您,该方法split()可以将字符串拆分为给定字符或多个字符。

'This is great'.split(' ')
#=> ['This', 'is', 'great']
'not--so--great'.split('--')
#=> ['not', 'so', 'great']

13.如何检查仅由小写字母组成的字符串?


仅当字符串仅由小写字母组成时, 该方法才islower()返回True

'all lower case'.islower() #=> True
'not aLL lowercase'.islower() # False

14.如何检查字符串以小写字母开头?


这可以通过islower()为字符串的第一个字符调用上述方法来完成

'aPPLE'[0].islower() #=> True

15.在Python中是否可以在字符串中添加整数?


在某些语言中这是可能的,但是Python在尝试执行类似操作时会抛出错误TypeError

'Ten' + 10 #=> TypeError

16.如何“翻转”一条线?


为了“翻转”一行,可以通过将其显示为字符列表来进行拆分,“翻转”该列表,然后结合其元素形成新的一行。

''.join(reversed("hello world"))
#=> 'dlrow olleh'

17.如何将行列表合并为一行,其元素由连字符分隔?


该方法join()可以将列表项组合成字符串,并使用指定的字符分隔单个字符串。

'-'.join(['a','b','c'])
#=> 'a-b-c'

18.我怎么知道字符串中的所有字符都是ASCII?


如果字符串中的所有字符均为ASCII,则 该方法isascii()返回True

print( 'Â'.isascii() ) #=> False
print( 'A'.isascii() ) #=> True

19.如何将整个字符串转换为大写或小写?


为了解决这些问题,你可以使用的方法upper()lower(),它们分别带领字符串大小写的所有字符。

sentence = 'The Cat in the Hat'
sentence.upper() #=> 'THE CAT IN THE HAT'
sentence.lower() #=> 'the cat in the hat'

20.如何将字符串的第一个和最后一个字符转换为大写?


在这里,与前面的示例之一一样,我们将按索引引用字符串的字符。Python中的行是不可变的,因此我们将在现有行的基础上构建新行。

animal = 'fish'
animal[0].upper() + animal[1:-1] + animal[-1].upper()
#=> 'FisH'

21.如何检查仅由大写字母组成的字符串?


有一种方法isupper()与已经考虑的方法相似islower()但是仅当整个字符串由大写字母组成时才isupper()返回True

'Toronto'.isupper() #=> False
'TORONTO'.isupper() #= True

22.在什么情况下您会使用splitlines()方法?


该方法splitlines()通过换行符分隔字符串。

sentence = "It was a stormy night\nThe house creeked\nThe wind blew."
sentence.splitlines()
#=> ['It was a stormy night', 'The house creeked', 'The wind blew.']

23.如何获得线段?


要获取字符串的切片,请使用以下语法:

string[start_index:end_index:step]

step是将返回范围中的字符串字符的步骤start_index:end_index一个step3值表示每一个第三个字符将被退回。

string = 'I like to eat apples'
string[:6] #=> 'I like'
string[7:13] #=> 'to eat'
string[0:-1:2] #=> 'Ilk oetape' ( 2- )

24.如何将整数转换为字符串?


您可以使用构造函数将数字转换为字符串str()

str(5) #=> '5'

25.我怎么知道一个字符串只包含字母字符?


如果字符串中的所有字符均为字母,则 该方法isalpha()返回True

'One1'.isalpha() #=> False
'One'.isalpha() #=> True

26.如何替换给定行中某个子字符串的所有出现?


如果没有导出允许使用正则表达式的模块,则可以使用该方法来解决此问题replace()

sentence = 'Sally sells sea shells by the sea shore'
sentence.replace('sea', 'mountain')
#=> 'Sally sells mountain shells by the mountain shore'

27.如何以最小的ASCII码返回一行字符?


如果看一下元素的ASCII码,就会发现例如大写字母的编码比小写字母的编码小。该函数min()返回具有最小代码的字符串的字符。

min('strings') #=> 'g'

28.如何检查仅包含字母数字字符的字符串?


字母数字字符包括字母和数字。要回答此问题,可以使用方法isalnum()

'Ten10'.isalnum() #=> True
'Ten10.'.isalnum() #=> False

29.如何从行的开头(从左侧),行尾(从右侧)或行的两侧删除空格?


这里,方法lstrip()rstrip(),分别是对我们有用strip()

string = '  string of whitespace    '
string.lstrip() #=> 'string of whitespace    '
string.rstrip() #=> '  string of whitespace'
string.strip() #=> 'string of whitespace'

30.如何检查字符串以给定的字符序列开头或以给定的字符序列结尾?


要回答这个问题,您可以分别采用方法startswith()endswith()

city = 'New York'
city.startswith('New') #=> True
city.endswith('N') #=> False

31.如何用ASCII编码字符串?


该方法encode()允许您使用指定的编码对字符串进行编码。使用默认编码utf-8如果不能使用指定的编码表示某个字符,则会生成错误UnicodeEncodeError

'Fresh Tuna'.encode('ascii')
#=> b'Fresh Tuna'
'Fresh Tuna Â'.encode('ascii')
#=> UnicodeEncodeError: 'ascii' codec can't encode character '\xc2' in position 11: ordinal not in range(128)

32.我怎么知道一个字符串只包含空格?


仅当字符串仅包含空格时isspace()True才有 一种方法返回

''.isspace() #=> False
' '.isspace() #=> True
'   '.isspace() #=> True
' the '.isspace() #=> False

33.如果将一行乘以3,会发生什么?


将创建一个新行,代表原始行重复三遍。

'dog' * 3
# 'dogdogdog'

34.如何使字符串中每个单词的首字母大写?


有一种方法title()可以将字符串中每个单词的首字母大写。

'once upon a time'.title() #=> 'Once Upon A Time'

35.如何合并两条线?


您可以使用运算符来连接字符串+

'string one' + ' ' + 'string two' 
#=> 'string one string two'

36.如何使用partition()方法?


该方法partition()将字符串按给定的子字符串分隔。之后,结果作为元组返回。此外,元组中还包括进行细分的子串。

sentence = "If you want to be a ninja"
print(sentence.partition(' want '))
#=> ('If you', ' want ', 'to be a ninja')

37. Python中的行是不可变的。这是什么意思?


字符串是不可变的这一事实表明,在创建字符串对象之后,将无法对其进行更改。当“修改”行时,原始行不会更改。而是在内存中创建了全新的对象。您可以使用函数证明这一点id()

proverb = 'Rise each day before the sun'
print( id(proverb) )
#=> 4441962336
proverb_two = 'Rise each day before the sun' + ' if its a weekday'
print( id(proverb_two) )
#=> 4442287440

连接时'Rise each day before the sun'' if its a weekday'在内存中时,将使用新标识符创建一个新对象。如果原始对象要更改,则这些对象将具有相同的标识符。

38.如果两次声明同一行(将其写入2个不同的变量)-内存中将创建多少个对象?1或2?


下面的代码片段是此类使用字符串的示例:

animal = 'dog'
pet = 'dog'

使用这种方法,在内存中仅创建一个对象。当我第一次遇到这个问题时,对我来说似乎并不直观。但是这种机制可以帮助Python在处理长字符串时节省内存。

这可以通过诉诸功能来证明id()

animal = 'dog'
print( id(animal) )
#=> 4441985688
pet = 'dog'
print( id(pet) )
#=> 4441985688

39.如何使用maketrans()和translate()方法?


该方法maketrans()允许您描述一个字符到另一个字符的映射,并返回转换表。

该方法translate()允许您应用指定的表来转换字符串。

#  
mapping = str.maketrans("abcs", "123S")
#  
"abc are the first three letters".translate(mapping)
#=> '123 1re the firSt three letterS'

请注意,酒吧是由符号替代的abcs,分别为符号123S

40.如何从琴弦上去除元音?


这个问题的一个答案是使用列表理解机制对字符串中的字符进行排序。通过与包含元音的元组进行比较来检查符号。如果该字符未包含在元组中,则会将其追加到新行中。

string = 'Hello 1 World 2'
vowels = ('a','e','i','o','u')
''.join([c for c in string if c not in vowels])
#=> 'Hll 1 Wrld 2'

41.在什么情况下使用rfind()方法?


该方法rfind()方法类似find(),但是与方法不同find(),它不是从左到右而是从右到左扫描字符串,返回第一个找到的所需子字符串出现的索引。

story = 'The price is right said Bob. The price is right.'
story.rfind('is')
#=> 39

摘要


我经常向一位年龄较大的产品经理解释,开发人员不是存储对象方法描述的字典。但是,开发人员记住的方法越多,他用Google进行搜索的次数就越少,他将越快越愉快。我希望现在您可以轻松回答此处讨论的问题。

亲爱的读者们!Python中的字符串处理怎么样?您会建议准备面试的人吗?


All Articles