我有一个数字列表:
list = [2, 5, 4, 1, 3]
我想对它进行排序并使用for循环迭代排序列表:
print list
list.sort()
print list
for n in list:
print list
print n
list.pop(0)
但输出看起来并不像预期的那样:
# before sort:
[2, 5, 4, 1, 3]
# after sort:
[1, 2, 3, 4, 5]
## still everything ok
# for loop:
[1, 2, 3, 4, 5]
1
[2, 3, 4, 5]
3
[3, 4, 5]
5
## what?
为什么for循环不接受排序列表并使用之前的状态,即使它返回排序列表?是否有隐藏的索引,sort()
无法更改?我是Python的新手,这真是奇怪的行为。我做错了什么?
我想要实现的目标:
# before sort:
[2, 5, 4, 1, 3]
# after sort:
[1, 2, 3, 4, 5]
# for loop:
[1, 2, 3, 4, 5]
1
[1, 2, 3, 4, 5]
2
[1, 2, 3, 4, 5]
3
[1, 2, 3, 4, 5]
4
[1, 2, 3, 4, 5]
5
更新:我需要那个流行音乐。我的这个函数的完整代码:
inTemplate = [False]
inLink = [False]
regexNeeded = [False, True]
# ...some if elif else skipped there
# finds positions of brackets and sorts them
brackets = [m.start() for m in re.finditer("}}",text)]
brackets += [m.start() for m in re.finditer("{{",text)]
brackets += [m.start() for m in re.finditer("]]",text)]
brackets += [m.start() for m in re.finditer(r"\[{2}",text)]
brackets.sort(key=int)
# if any bracket in text
if not brackets == []:
# for every bracket
for n in brackets:
# what bracket and what starts/ends with it
if text[n] == '{':
inTemplate.append(True)
elif text[n] == '[':
inLink.append(True)
elif text[n] == ']':
inLink.pop()
else:
if inTemplate[-1]:
inTemplate.pop()
# if ends template which doesn't started, then there is no need to regex
elif regexNeeded[-1]:
regexNeeded.pop()
# break if out of regexNeeded area
else:
break
brackets.pop(0)
# if for loop breaked
if not brackets == []:
# do some regex on that bracket, where for loop breaked
where = brackets[0]
before = text[:where]
before = re.sub(r'\s*$', r'\n', before)
after = text[where:]
if not regexNeeded[-1]:
after = re.sub(r'^}}\s*', r'}}\n', after)
text = before + after
答案 0 :(得分:1)
功能pop()
将删除,并在索引len(list)-1
中返回列表中的 last 项。致电pop(0)
会删除 第一个项,因此如果您反复调用它,那么您的列表将按顺序打印 ,这意味着{ {1}}因为你先排序了它。
请阅读documentation:
1, 2, 3, 4 ,5
删除列表中给定位置的项目,然后将其返回。
如果您没有希望删除列表中的项目,只需打印它们,则可以使用list.pop([i])
代替print (list[index])
。在你的循环中,由于它是从1排序并开始的,你实际上甚至可以使用pop()
。
答案 1 :(得分:1)
使用 pop 完全删除列表中的元素。因此,参考被删除,我们只能迭代剩余项目的数量。代码在Python 3中,但我想它不应该太难以更改打印语句。
list = [2, 5, 4, 1, 3]
print(list)
list.sort()
print(list)
for n in range(len(list)):
print(list)
print(list.pop(0))