2

例如,如果我的初始字符串是,"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:
4

5 回答 5

2
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? '
于 2019-09-18T06:30:36.293 回答
0

您已使用 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)
于 2019-09-18T08:17:46.730 回答
0

好吧,随便玩玩.. 我喜欢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”

于 2019-09-18T07:19:35.033 回答
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'
于 2019-09-18T06:41:03.223 回答
0

如果你不是 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

就我个人而言,我会选择顶部,因为它不那么令人困惑,特别是如果您不需要在其他地方使用该功能

于 2019-09-18T07:06:39.927 回答