如何检查列表中的单词是否有双字母,并使用python创建一个包含双字母单词的新列表



这就是我尝试的:

L=["ss","dd","da","ne","kk"]
L1=[]
for i in L:
if L[i]==L[i+1]:
L1.append[i]
print(L1)

但它说,列表索引必须是整数或切片,而不是str。我该怎么办?

理想情况下,使用列表理解:

L1 = [e for e in L if e[0]==e[1]]

输出:['ss', 'dd', 'kk']

或者修改您的代码:

L1=[]
for e in L:
if e[0] == e[1]:
L1.append(e)

您可以将每个单词变成一个集合,并将该集合的长度(只保留唯一字符(与原始单词的长度进行比较:

words = ["ss","dd","da","ne","kk"]
doubles = [w for w in words if len(set(w)) < len(w)]
print(doubles)

哪个应该给你:

['ss', 'dd', 'kk']

代码不起作用的原因是i表示列表中的每个元素L。相反,您将i视为一个索引。如果它是一个索引,我们将使用:for i in range(len(L)):

此外,当使用.append()函数或任何相关函数时,我们使用括号而不是括号传递参数。

为了解决这个问题,我们可以修改if语句,使得如果i的第一个字符等于i的第二个字符,那么我们将i附加到L1:

L=["ss","dd","da","ne","kk"]
L1=[]
for i in L:
if i[0] == i[1]:
L1.append(i)
print(L1)

输出:

['ss', 'dd', 'kk']

这适用于所有列表,其中每个元素只有2个字符。如果我们想让它适用于所有长度的字符串,我们可以创建一个函数来检查单词是否有双字母:

def hasDoubleLetters(i):
for x in range(len(i) - 1):
if i[x] == i[x + 1]:
return True
return False

此函数将遍历除最后一个字符外的所有字符,并检查它是否等于以下字符。如果是,函数将返回True。如果函数完成迭代并且没有返回True,则函数将返回False。

def hasDoubleLetters(i):
for x in range(len(i) - 1):
if i[x] == i[x + 1]:
return True
return False
L=["ss","dd","da","book", "house"]
L1=[]
for i in L:
if hasDoubleLetters(i):
L1.append(i)
print(L1)

输出:

['ss', 'dd', 'book']

我希望这有助于回答你的问题!如果您需要任何进一步的澄清或细节,请告诉我:(

最新更新