无法在 python 中添加列表中的最后一个元素


def front_x(words):
list2 = []
for word in words:
if word[0] == 'x':
list2.append(word)
words.remove(word)
words.sort()
list2.sort()
return list2 + words


def main():
print(front_x(['bbb', 'ccc', 'axx', 'xzz', 'xaa']))


if __name__ == '__main__':
main()

这是我的代码,我想做这个例子:

给定一个字符串列表,返回字符串个数的计数字符串长度大于等于2的字符串字符串的最后一个字符是一样的。注意:python没有++操作符,但是+=可以工作。

和输出是这样的:[‘xzz’,‘axx’,"bbb"、"ccc"、"xaa")

问题是列表上的最后一个元素没有进入我创建的新列表。我该怎么办?

  • 你不应该在迭代words时改变它,否则会导致一些bug。您需要迭代words的副本以避免更改它。
  • 删除word[0] == 'x'时的单词,这会导致循环提前结束。
  • 您可以在IDE中使用调试模式(例如VSCode,PyCharm)逐行运行代码以检查运行时实际发生的情况。

示例代码:

def front_x(words):
list2 = []
for word in words.copy():
if word[0] == 'x':
list2.append(word)
words.remove(word)
words.sort()
list2.sort()
return list2 + words
def main():
print(front_x(['bbb', 'ccc', 'axx', 'xzz', 'xaa']))
main() 

结果:

['xaa', 'xzz', 'axx', 'bbb', 'ccc']

这是因为您正在从正在迭代的列表中删除元素。从列表中删除一个元素后,元素的位置发生移位。当迭代指针位于倒数第二个元素时,列表从['bbb', 'ccc', 'axx', 'xzz', 'xaa']变为['bbb', 'ccc', 'axx', 'xaa']。因此迭代指针现在指向最后一个元素。

在这个问题中,问题希望你使用两种不同的东西:

  1. lenfunction
  2. 列表索引

len

len返回容器的大小。容器可以是strlisttuple等。

检查给定字符串的长度是否等于或大于2。

if len(word) >= 2:

索引访问容器的第一个元素(在您的示例中是字符串)很容易。您可以获得0th元素,如:

word[0]

但是您需要获得容器的最后一个元素,并且您的字符串可以改变长度。所以你必须提供一个方法来获取容器的最后一个元素。

您同样可以使用len函数。如:

last_char = word[len(word) - 1]

或者你可以使用负索引

last_char = word[-1]