在這里,我一直試圖從給定的字串中洗掉回文單詞。這是我的代碼:
lis = list(text.split(" "))
newlis=[]
for i in range(len(lis)):
if (lis[i] != lis[i][::-1]):
newlis.append(lis[i])
print(newlis)
如果輸入是
Nair speaks malayalam
我得到的輸出為
['Nair', 'speaks', 'Malayalam']
為什么不洗掉回文詞?
uj5u.com熱心網友回復:
您可以檢查字串是否為回文 str(n) == str(n)[::-1]
因此,您可以創建一個函式并使用它過濾串列,如下所示:
def is_palindrome(n):
return str(n) == str(n)[::-1]
lis = [wrd for wrd in list(text.split(" ")) if not is_palindrome(wrd)]
這是一個有效的 repl.it 專案:
https://replit.com/@HarunYlmaz/Palindrome#main.py
更新
正如@Passerby 在評論中所述,您可能需要忽略大小寫。如果是這樣,您也可以使用lower()方法:
str(n).lower() == str(n).lower()[::-1]
uj5u.com熱心網友回復:
串列理解或過濾器:
>>> [i for i in text.split() if i != i[::-1]]
['Nair', 'speaks']
>>> list(filter(lambda x: x != x[::-1], text.split()))
['Nair', 'speaks']
>>>
或者忽略大小寫:
>>> [i for i in text.split() if i.lower() != i[::-1].lower()]
['Nair', 'speaks']
>>> list(filter(lambda x: x.lower() != x[::-1].lower(), text.split()))
['Nair', 'speaks']
>>>
uj5u.com熱心網友回復:
你的代碼沒問題。可能是,在問題中您輸入了“馬拉雅拉姆語”,但實際上它是“馬拉雅拉姆語”。小寫“m”不等于大寫“M”,因此它不會洗掉它。如果您不想區分大小寫,請使用.lower()方法。這將使所有字母變小,然后檢查回文,使其不區分大小寫。如果您還希望用戶的輸入使其動態化,這是另一種方法。使用split()函式分隔單詞。檢查每個單詞是否是回文。如果是,請將其從串列中洗掉,否則繼續。之后,打開你的清單。您的代碼:
x=input("Enter string")
y=list(x.split())
for i in y:
if i.lower()==i[::-1].lower():
y.remove(i)
print(*y)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/345158.html
