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']。因此迭代指针现在指向最后一个元素。
在这个问题中,问题希望你使用两种不同的东西:
len
function- 列表索引
len
len
返回容器的大小。容器可以是str
、list
、tuple
等。
检查给定字符串的长度是否等于或大于2。
if len(word) >= 2:
索引访问容器的第一个元素(在您的示例中是字符串)很容易。您可以获得0th
元素,如:
word[0]
但是您需要获得容器的最后一个元素,并且您的字符串可以改变长度。所以你必须提供一个方法来获取容器的最后一个元素。
您同样可以使用len
函数。如:
last_char = word[len(word) - 1]
或者你可以使用负索引
last_char = word[-1]