从python字符串中删除大写字母
我试图弄清楚如何使用Python从字符串中删除大写字母,但不使用从python字符串中删除大写字母,python,string,Python,String,我试图弄清楚如何使用Python从字符串中删除大写字母,但不使用for循环 我尝试在使用while循环遍历列表时执行此操作 那么,如何删除所提供字符串中的大写字母呢?这里有几个选项: 1) 如果您只是想将所有大写字母转换为小写字母,那么.lower()是最简单的方法 s = 'ThiS iS A PyTHon StrinG witH SomE CAPitaL LettErs' import re print(re.sub(r'[A-Z]', '', s)) 给出: this is a py
for
循环
我尝试在使用while
循环遍历列表时执行此操作
那么,如何删除所提供字符串中的大写字母呢?这里有几个选项: 1) 如果您只是想将所有大写字母转换为小写字母,那么
.lower()
是最简单的方法
s = 'ThiS iS A PyTHon StrinG witH SomE CAPitaL LettErs'
import re
print(re.sub(r'[A-Z]', '', s))
给出:
this is a python string with some capital letters
hi i yon trin wit om ita ettrs
2) 如果您想完全删除它们,那么re.sub()
是一种简单的方法
s = 'ThiS iS A PyTHon StrinG witH SomE CAPitaL LettErs'
import re
print(re.sub(r'[A-Z]', '', s))
给出:
this is a python string with some capital letters
hi i yon trin wit om ita ettrs
(三)
对于字符串列表,可以使用列表理解:
#Option1
[i.lower() for i in s])
#Option2
import re
[re.sub(r'[A-Z]', '', i) for i in s])
#Option3 (as mentioned by @JohnColeman)
[''.join([j for j in i if not j.isupper()]) for i in s]
您在这里有几个选项: 1) 如果您只是想将所有大写字母转换为小写字母,那么
.lower()
是最简单的方法
s = 'ThiS iS A PyTHon StrinG witH SomE CAPitaL LettErs'
import re
print(re.sub(r'[A-Z]', '', s))
给出:
this is a python string with some capital letters
hi i yon trin wit om ita ettrs
2) 如果您想完全删除它们,那么re.sub()
是一种简单的方法
s = 'ThiS iS A PyTHon StrinG witH SomE CAPitaL LettErs'
import re
print(re.sub(r'[A-Z]', '', s))
给出:
this is a python string with some capital letters
hi i yon trin wit om ita ettrs
(三)
对于字符串列表,可以使用列表理解:
#Option1
[i.lower() for i in s])
#Option2
import re
[re.sub(r'[A-Z]', '', i) for i in s])
#Option3 (as mentioned by @JohnColeman)
[''.join([j for j in i if not j.isupper()]) for i in s]
字符串是不可变的,所以不能从中删除字符,但可以创建一个跳过这些字符的新字符串 最简单的方法是:
s = ''.join(ch for ch in s if not ch.isupper())
如果出于某种原因(如分配要求),您想在不使用的情况下执行此操作,我们可以将其作为显式循环写入,然后在时将其转换为。因此:
result = []
for ch in s:
if not ch.isupper(): result.append(ch)
s = ''.join(result)
要更改循环,我们必须手动设置和下一个迭代器,但使用普通int作为索引而不是迭代器可能更容易理解:
result = []
i = 0
while i < len(s):
ch = s[i]
if not ch.isupper(): result.append(ch)
i += 1
s = ''.join(result)
字符串是不可变的,所以不能从中删除字符,但可以创建一个跳过这些字符的新字符串
最简单的方法是:
s = ''.join(ch for ch in s if not ch.isupper())
如果出于某种原因(如分配要求),您想在不使用的情况下执行此操作,我们可以将其作为显式循环写入,然后在时将其转换为。因此:
result = []
for ch in s:
if not ch.isupper(): result.append(ch)
s = ''.join(result)
要更改循环,我们必须手动设置和下一个迭代器,但使用普通int作为索引而不是迭代器可能更容易理解:
result = []
i = 0
while i < len(s):
ch = s[i]
if not ch.isupper(): result.append(ch)
i += 1
s = ''.join(result)
删除,如从字符串中完全删除或用小写字母替换?为什么使用while循环?完全删除您可以将任何for循环转换为while循环,只需手动创建一个迭代器并在每次循环时连接它,或者手动创建一个int进行索引并在每次循环中递增1即可。我不知道你为什么要这样做,但如果出于某种原因,你的要求是“使用while循环”,那么这就是满足该要求的显而易见的方法。为什么不使用像['''.join(如果不是c.isupper(),则c代表s中的c)这样的理解方式来表示字符串中的s]
?即使不能使用列表理解,该理解中的表达式也显示了从字符串中删除大写字母的一种方法。删除,如中所述,将其从字符串中完全删除或用小写字母替换?为什么要使用while循环?完全删除您可以将任何for循环转换为while循环,只需手动创建一个迭代器并在每次循环时连接它,或手动创建一个int进行索引,并通过循环每次将其递增1。我不知道你为什么要这样做,但如果出于某种原因,你的要求是“使用while循环”,那么这就是满足该要求的显而易见的方法。为什么不使用像['''.join(如果不是c.isupper(),则c代表s中的c)这样的理解方式来表示字符串中的s]
?即使不能使用列表理解,该理解中的表达式也显示了从字符串中删除大写字母的一种方法。有没有办法通过切片或连接字符串来实现这一点?我不允许使用上面提供的命令检查John Coleman comment/answer,那么我认为一个还没有学习for循环的学生除了第一个之外,将无法理解其中的任何一个,但是展示它们并可能使它们(或其他有相同问题的学生)理解它们是非常酷的好奇到可以学到比课堂教学大纲更多的东西。特别是对于一个已经在问“难道没有更好的方法吗?”并试图找出答案的学生来说。有没有一种方法可以通过切割或连接绳子来做到这一点?我不允许使用上面提供的命令检查John Coleman comment/answer,那么我认为一个还没有学习for循环的学生除了第一个之外,将无法理解其中的任何一个,但是展示它们并可能使它们(或其他有相同问题的学生)理解它们是非常酷的好奇到可以学到比课堂教学大纲更多的东西。特别是对于一个已经在问“有没有更好的方法?”并试图找出答案的学生来说。更像是OP老师奇怪的要求……;)@uwain12345嗯,是的,我想OP唯一真正的要求是“我想满足老师奇怪的要求,所以我通过了作业”。但我认为值得指出的是,为什么在这个赋值之外,你实际上会想在这里使用而。我会写s=''.join([ch for ch in s if notch.isupper()])
或s='.join(filter(str.isupper,s))
。两者都比传递到str.join
的gencomp快。顺便说一句,你的文章中引用的话真的很奇怪。没有办法通过拆分/加入/切片来做到这一点吗?@Jean-Françoisfare是的,将迭代器传递给str.join意味着它只是在CPython中列出它们。但这只是一个很小的持续性能差异,不太可能有什么关系。另外,为it进行优化依赖于了解一种特定语言实现的内部结构(或者至少测试它)。如果不相关,就写一个最清楚的。我认为在这里使用genexpr更清楚,因为就行为而言,我们不在乎我们在构建什么样的iterable;如果我们使用[],我们是在暗示表演在这里很重要。更像是OP老师的奇怪要求