定义一个函数来检查元素列表是否为回文,并返回一个列表



我必须这样做:

定义一个名为isSymmetricalVec的函数,它接受一个元素列表,检查列表中的每个元素是否为回文,然后在列表中返回结果。例如,给定["1441", "Apple", "radar", "232", "plane"],该函数返回[TRUE, FALSE, TRUE, TRUE, FALSE]

我写了下面的代码,但我被困在我不能返回列表结果的地方。

def isSymmetricalVec(myList): 

for myString in myList:

myList = []

mid = (len(myString)-1)//2
start = 0
last = len(myString)-1
flag = 0

while(start<mid): 

if (myString[start]== myString[last]): 

start += 1
last -= 1

else: 
flag = 1
break; 

if flag == 0: 
print(bool(1)) 
else: 
print(bool(0)) 
# Enter a list of strings to check whether it is symmetrical or not 
myList = ["12321", "12345", "madam", "modem"]
isSymmetricalVec(myList)

我的函数返回以下内容,但结果不是列表格式:

True
False
True
False

我如何修改我的代码返回一个列表格式的结果?

您的函数应该return值,而不是打印它。创建一个空列表new_listappended的结果。

def isSymmetricalVec(myList):
new_lst = []
for myString in myList:
mid = (len(myString) - 1) // 2
start = 0
last = len(myString) - 1
flag = 0
while (start < mid):
if (myString[start] == myString[last]):
start += 1
last -= 1
else:
flag = 1
break;
if flag == 0:
new_lst.append(True)
else:
new_lst.append(False)
return new_lst
# Enter a list of strings to check whether it is symmetrical or not

你的函数实际上不是返回任何东西。你看到的只是打印出来的而非返回.

你会想把每个答案都保存在这样的list中。

def isSymmetricalVec(myList):
list_of_answers = []

for myString in myList:
...

while(start<mid): 
...

if flag == 0: 
print(bool(1))
list_of_answers.append(True)
else: 
print(bool(0)) 
list_of_answers.append(False)
return list_of_answers

这样你的答案就会被打印出来并返回。

最后,您需要一个变量来保存返回的list.
# Enter a list of strings to check whether it is symmetrical or not 
myList = ["12321", "12345", "madam", "modem"]
list_of_answers = isSymmetricalVec(myList)
def isSymmetricalVec(myString): 
mid = (len(myString)-1)//2
start = 0
last = len(myString)-1
flag = 0
while(start<mid): 
if (myString[start]== myString[last]): 

start += 1
last -= 1

else: 
flag = 1
break; 

if flag == 0: 
return True
else: 
return False

test = ["1221", "madam", "hello world"]

final = [isSymmetricalVec(i) for i in test]
print(final)

我重写了一些代码,这将是我的解决方案。它保留了原有的功能,既时尚又高效。它还使原来的功能更灵活,更容易迁移。

你的函数不返回任何东西,只是打印值。有一个很好的方法可以用pythonslices来缩短你的算法。这个函数返回布尔对象列表。

from math import ceil, floor
def isSymmetricalVec(myList):
list_of_answers = []
for string in myList:
strLength = len(string)
#There is a string palindrome check
if string[:floor(strLength//2)] == string[ceil(strLength/2):][::-1]:
toAppend = True
else:
toAppend = False
list_of_answers.append(toAppend)

return list_of_answers

值得补充的是,最好使用TrueFalse而不是bool(1)bool(0)

一个例子:

>>> isSymmetricalVec(['11211', 'AbbA', '12f23'])
>>> [True, True, False]

最新更新