我在Python类的介绍中并获得了这个任务:
给定一个字符串列表,返回一个新列表,其中包含原始列表中以相同字符开头和结尾的所有字符串。匹配不区分大小写,意味着“a”应与“A”匹配。不要以任何方式改变原始列表。
我遇到了切片和比较字符串的问题,因为给出的可能列表包括''(空字符串)。我很难过,任何帮助都会受到赞赏。
def first_last(strings):
match=[]
x=''
count=0
while count<len(strings):
if x[0] == x[-1]:
match.append(x)
x+=x
count+=1
所以,当给出:
['aba', 'dcn', 'z', 'zz', '']
或
['121', 'NbA', '898', '']
我明白了:
string index out of range
当我应该看到的时候:
['aba', 'z', 'zz']
和
['121', '898']
答案 0 :(得分:1)
您的列表包含空字符串(''
)。因此,您必须检查当前正在迭代的每个元素的长度。此外,您似乎没有使用x
:
def first_last(strings):
match=[]
count=0
while count<len(strings):
if strings[count]:
if strings[count][0].lower() == strings[count][-1].lower():
match.append(strings[count])
count += 1
return match
但请注意,您也可以使用列表理解:
s = ['aba', 'dcn', 'z', 'zz', '']
final_strings = [i for i in s if i and i[0].lower() == i[-1].lower()]
答案 1 :(得分:0)
def first_last(strings):
match=[]
for x in strings:
if x is '' continue;
if x.lower()[0] == x.lower()[-1]:
match.append(x)
return match
答案 2 :(得分:0)
首先测试list元素是否为None:
def first_last(strings):
match = []
for element in strings:
if element and element[0].lower() == element[-1].lower():
match.append(element)
return match
或与列表comp:
match = [element for element in strings if element and element[0].lower() == element[-1].lower()]