句子的组字母

Group letters of a sentence

我对字符串中的字母分组有疑问。比如我想对一个句子进行分组:my name is Jhon 我想要这样的东西:myname ynamei nameis,等等...
我的代码是:

def letters(siq,data):
    n=len(siq)
    for i in range(data -1, n -6, 1):
        yield siq[i:i+6]

test = 'My name is Jhon'
for i in range(1,4):
    print(list(letters(test,i)))

我会这样做:

test = 'My name is Jhon'
length = 6

test = test.replace(' ', '').lower()  # test = 'mynameisjhon'

data = []
for i in range(len(test) - length + 1):
    data.append(test[i:i+length])
print(data)

输出:

['myname', 'ynamei', 'nameis', 'ameisj', 'meisjh', 'eisjho', 'isjhon']

如果您想要所有可能的字母组,无论长度如何:

test = 'My name is Jhon'
test = test.replace(' ', '').lower()

data = []
for i in range(len(test)):
    for j in range(i + 1, len(test) + 1):
        data.append(test[i:j])
print(data)

输出:

['m', 'my', 'myn', 'myna', 'mynam', 'myname', 'mynamei', 'mynameis', 'mynameisj', 'mynameisjh', 'mynameisjho', 'mynameisjhon', 'y', 'yn', 'yna', 'ynam', 'yname', 'ynamei', 'ynameis', 'ynameisj', 'ynameisjh', 'ynameisjho', 'ynameisjhon', 'n', 'na', 'nam', 'name', 'namei', 'nameis', 'nameisj', 'nameisjh', 'nameisjho', 'nameisjhon', 'a', 'am', 'ame', 'amei', 'ameis', 'ameisj', 'ameisjh', 'ameisjho', 'ameisjhon', 'm', 'me', 'mei', 'meis', 'meisj', 'meisjh', 'meisjho', 'meisjhon', 'e', 'ei', 'eis', 'eisj', 'eisjh', 'eisjho', 'eisjhon', 'i', 'is', 'isj', 'isjh', 'isjho', 'isjhon', 's', 'sj', 'sjh', 'sjho', 'sjhon', 'j', 'jh', 'jho', 'jhon', 'h', 'ho', 'hon', 'o', 'on', 'n']

您可以通过使用 .replace() 删除每个 space 来预处理字符串,然后使用 .lower().

将字符串小写

然后,要提取 six-character 个子字符串,您可以使用 zip() 和列表解包。这种方法可以更轻松地动态设置要提取的子字符串的长度。

data = 'My name is Jhon'
data = data.replace(' ', '').lower()
substring_length = 6
print(list(''.join(excerpt) for excerpt in zip(*[data[i:] for i in range(substring_length)])))