这就是我尝试的:
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']
我希望这有助于回答你的问题!如果您需要任何进一步的澄清或细节,请告诉我:(