例如,如果我的初始字符串是,"hello world! how are you? 0"
我希望得到的字符串是"hlo ol! hw r yu?"
. 到目前为止,我有以下代码:
s = "hello world! how are you? 0"
for char in s:
if char.isalpha() == True:
i = 0
s2 = ""
for char in s:
if char.isalpha() or char.isnumeric():
if (i % 2) == 0:
s2 += char
i += 1
else:
s2 += char
输出字符串s2
将是:
# s2 = 'hlo ol! hw r yu? '
您已使用 isalpha() ,而是使用 isalnum() 来包含字母和数值。
word = "hello world! how are you? 0"
index = 0
result = ""
for letter in word:
if(letter.isalnum() == False):
result += letter
elif(index == 0 and letter.isalnum() == True):
result += letter
index = 1
else:
index = 0
print (result)
好吧,随便玩玩.. 我喜欢c[::2]
operator 方法。这里的问题是计数从单词中的第一个字母开始并且不包括空格..但这很有趣。
import re
import string
s = "hello world! how are you? 0"
split_by_punc = re.findall(f"[\w]+|[{string.punctuation}]", s)
result = ' '.join(c[::2] if c[::2].isalnum() else c for c in split_by_punc)
for punc in string.punctuation:
result = result.replace(f' {punc}', punc) # remove extra spaces before punctuation
“hlo wrd!hw ae yu?0”
尝试这个:
>>> s = "hello world! how are you? 0"
>>> ' '.join(j[::2] if i%2==0 else j[1::2] for i,j in enumerate(''.join(k for k in s if k.isalpha() or k==' ').split()))
'hlo ol hw r yu'
首先,我们用 . 删除所有非字母字符和空格''.join(k for k in s if k.isalpha() or k==' ')
。这产生'hello world how are you '
. 然后我们拆分它。我们得到['hello', 'world', 'how', 'are', 'you']
. 现在对于这个列表中的每个项目,如果它们在奇数位置(索引),我们从第二个索引开始跳过字符串中的交替字符,如果它们在偶数位置(索引),从第一个索引开始跳过字符串中的交替字符。
这相当于:
s1 = ''.join(k for k in s if k.isalpha() or k==' ') #'hello world how are you'
s1_list = s1.split() #['hello', 'world', 'how', 'are', 'you']
s2_list = [j[::2] if i%2==0 else j[1::2] for i,j in enumerate(s1_list)] #['hlo', 'ol', 'hw', 'r', 'yu']
s3 = ' '.join(s2_list) #'hlo ol hw r yu'
如果你不是 100% 需要使用 char.isalpha()
s = "hello world! how are you? 0"
i = 0
for char in s:
if char == " " or (i % 2) != 0:
s2 += char
i += 1
s = s2
如果您想要每个奇数字符而不是偶数字符,只需从 if 语句中删除“not”即可反转逻辑
或者通过取出 if 语句并在客户端代码之外插入来修改上述内容
char.isalpha():
if char == " " or (i % 2) != 0:
s2 += char
s = "hello world! how are you? 0"
i = 0
for char in s:
char.isalpha()
s = s2
就我个人而言,我会选择顶部,因为它不那么令人困惑,特别是如果您不需要在其他地方使用该功能