【发布时间】:2016-01-30 11:19:35
【问题描述】:
我有一个数字列表:
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
【问题讨论】:
-
我认为您只是错过了输出中的某些内容。它应该可以正常工作。
-
@cad 想知道什么?
-
@aleskva 然后删除 list.pop(0)
-
为什么你认为排序有问题?
-
为什么需要pop
标签: python list python-2.7 sorting