比较列表中的字符串并将具有相同的第一个和最后一个字符的字符串附加到新列表中

时间:2017-12-02 00:50:53

标签: python

我在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']

3 个答案:

答案 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()]