我必须这样做:
定义一个名为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_list
和appended
的结果。
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
值得补充的是,最好使用
True
和False
而不是bool(1)
和bool(0)
。
一个例子:
>>> isSymmetricalVec(['11211', 'AbbA', '12f23'])
>>> [True, True, False]