【发布时间】:2011-04-03 08:09:19
【问题描述】:
例如,有一个字符串。 EXAMPLE.
如何从中删除中间字符,即M?我不需要代码。我想知道:
- Python 中的字符串是否以任何特殊字符结尾?
- 哪种方法更好 - 从中间字符开始将所有内容从右向左移动,或者创建一个新字符串而不复制中间字符?
【问题讨论】:
例如,有一个字符串。 EXAMPLE.
如何从中删除中间字符,即M?我不需要代码。我想知道:
【问题讨论】:
在 Python 中,字符串是不可变的,因此您必须创建一个新字符串。对于如何创建新字符串,您有几个选项。如果您想在出现的任何地方删除“M”:
newstr = oldstr.replace("M", "")
如果要删除中心字符:
midlen = len(oldstr) // 2
newstr = oldstr[:midlen] + oldstr[midlen+1:]
您询问字符串是否以特殊字符结尾。不,你像 C 程序员一样思考。在 Python 中,字符串是stored with their length,因此任何字节值,包括\0,都可以出现在字符串中。
【讨论】:
from __future__ import division 行将使 2.X 版 python 的行为类似于 3.X 版
"" 这样的空字符串并不意味着空行。如果你把它放在一个列表中,并用换行符加入它,那么它会变成一个空行,但是还有很多其他地方你可能会使用一个不会这样做的空字符串。
替换特定位置:
s = s[:pos] + s[(pos+1):]
替换特定字符:
s = s.replace('M','')
【讨论】:
l。那么对于第一部分,pos 的约束应该是l-1 > pos >= 0。
这可能是最好的方法:
original = "EXAMPLE"
removed = original.replace("M", "")
不用担心转换字符等。大多数 Python 代码都发生在更高级别的抽象上。
【讨论】:
M 可能不是唯一的。在那种情况下,这将替换所有Ms,对吧?
n,请使用original.replace("M", "", n)。
字符串是不可变的。但是您可以将它们转换为一个可变的列表,然后在更改列表后将其转换回字符串。
s = "this is a string"
l = list(s) # convert to list
l[1] = "" # "delete" letter h (the item actually still exists but is empty)
l[1:2] = [] # really delete letter h (the item is actually removed from the list)
del(l[1]) # another way to delete it
p = l.index("a") # find position of the letter "a"
del(l[p]) # delete it
s = "".join(l) # convert back to string
您还可以创建一个新字符串,正如其他人所展示的那样,通过从现有字符串中获取所有除了您想要的字符。
【讨论】:
str.replace 方法?
如何删除中间字符,即 M?
你不能,因为 Python 中的字符串是 immutable。
Python 中的字符串是否以任何特殊字符结尾?
没有。它们类似于字符列表;列表的长度定义了字符串的长度,没有字符作为终止符。
哪种方法更好 - 从中间字符开始将所有内容从右向左移动,或者创建一个新字符串而不复制中间字符?
您无法修改现有字符串,因此您必须创建一个新字符串,其中包含除中间字符之外的所有内容。
【讨论】:
使用translate() 方法:
>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'
【讨论】:
None 删除似乎不起作用):translate( str.maketrans("<>", " ") )
str.maketrans( "", "", "<>") 和 str.maketrans( {"<":None,">":None })
'EXAMPLE'.translate({ord("M"): None})
def kill_char(string, n): # n = position of which character you want to remove
begin = string[:n] # from beginning to n (n not included)
end = string[n+1:] # n+1 through end of string
return begin + end
print kill_char("EXAMPLE", 3) # "M" removed
我在某个地方看到过这个 here。
【讨论】:
card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)
如何从字符串中删除一个字符: 这是一个示例,其中有一堆卡片,表示为字符串中的字符。 其中一个被绘制(为 random.choice() 函数导入随机模块,该模块在字符串中选择一个随机字符)。 创建了一个新的字符串cardsLeft来保存由字符串函数replace()给出的剩余卡片,其中最后一个参数表示只有一个“卡片”将被空字符串替换......
【讨论】:
在 Python 2 上,您可以使用 UserString.MutableString 以可变方式执行此操作:
>>> import UserString
>>> s = UserString.MutableString("EXAMPLE")
>>> type(s)
<class 'UserString.MutableString'>
>>> del s[3] # Delete 'M'
>>> s = str(s) # Turn it into an immutable value
>>> s
'EXAPLE'
MutableString 在 Python 3 中被移除。
【讨论】:
另一种方法是使用函数,
下面是一种从字符串中删除所有元音的方法,只需调用函数
def disemvowel(s):
return s.translate(None, "aeiouAEIOU")
【讨论】:
s.translate(str.maketrans("", "", "aeiouAEIOU"))?
这是我切掉“M”的方法:
s = 'EXAMPLE'
s1 = s[:s.index('M')] + s[s.index('M')+1:]
【讨论】:
要删除char 或sub-string一次(仅第一次出现):
main_string = main_string.replace(sub_str, replace_with, 1)
注意:这里的1 可以替换为任何int,以替换您要替换的出现次数。
【讨论】:
您可以简单地使用列表推导。
假设您有字符串:my name is,并且您想要删除字符 m。使用以下代码:
"".join([x for x in "my name is" if x is not 'm'])
【讨论】:
如果你想删除/忽略字符串中的字符,例如,你有这个字符串,
“[11:L:0]”
来自 Web API 响应或类似的东西,例如 CSV 文件,假设您正在使用请求
import requests
udid = 123456
url = 'http://webservices.yourserver.com/action/id-' + udid
s = requests.Session()
s.verify = False
resp = s.get(url, stream=True)
content = resp.content
循环并删除不需要的字符:
for line in resp.iter_lines():
line = line.replace("[", "")
line = line.replace("]", "")
line = line.replace('"', "")
可选拆分,您将能够单独读取值:
listofvalues = line.split(':')
现在访问每个值更容易了:
print listofvalues[0]
print listofvalues[1]
print listofvalues[2]
这将打印出来
11
L
0
【讨论】:
Python 3.9+中引入了两种新的字符串删除方法
#str.removeprefix("prefix_to_be_removed")
#str.removesuffix("suffix_to_be_removed")
s='EXAMPLE'
在这种情况下,'M' 的位置是 3
s = s[:3] + s[3:].removeprefix('M')
或
s = s[:4].removesuffix('M') + s[4:]
#output'EXAPLE'
【讨论】:
from random import randint
def shuffle_word(word):
newWord=""
for i in range(0,len(word)):
pos=randint(0,len(word)-1)
newWord += word[pos]
word = word[:pos]+word[pos+1:]
return newWord
word = "Sarajevo"
print(shuffle_word(word))
【讨论】:
字符串在 Python 中是不可变的,因此您的两个选项基本上意味着相同的事情。
【讨论】: