Python 实施队列和双端队列排序期间的比较问题
Comparison issue during Python Implementation of Queue & Deque Sort
我正在尝试实现某种 "Queue",我想在其中尝试对队列的元素进行排序。这里的重点是查看是否可以使用队列和双端队列操作对特定队列进行排序。
我通过比较队列的第一个和最后一个元素,然后将较大的元素附加到新列表,从队列中删除该项目来实现这一点。最后我应该有一个新列表,只要 queue-deque 操作允许就排序。
但是在特定的测试用例中,我的算法对队列中的两个元素进行了错误的比较。
# the queue I am trying to "sort" is:
lst = "1000000842 1000000721 1000000671 1000000663 1000000626 1000000520 1000000126 999999978 1000000266 1000000501".split(" ")
# the new list that I will add my numbers from the start and the end of my queue.
new_lst = []
for x in range(len(lst)-1):
if lst[0] >= lst[-1]:
new_lst.append(lst[0])
del lst[0]
if lst[0] < lst[-1]:
new_lst.append(lst[-1])
del lst[-1]
print(new_lst)
此代码将 new_list 生成为:
['1000000842', '1000000721', '1000000671', '1000000663', '1000000626', '1000000520', '1000000501', '1000000266', '999999978', '1000000126']
它应该在的地方:
['1000000842', '1000000721', '1000000671', '1000000663', '1000000626', '1000000520', '1000000501', '1000000266', '1000000126', '999999978']
我认为问题出现在 "1000000126 999999978 1000000266"
部分。
它比较 "999999978"
和 "1000000126"
并将 "999999978"
添加到新列表而不是 "1000000126"
。
为什么?我还没弄明白。
您遇到了一个 Python 的问题,这个问题很常见,有时会让人非常困惑;即类型转换!
当您拆分列表(或队列)时,我相信您的意思可能是将每个项目的类型转换为整数:
list(map(int, "1000000842 1000000721 1000000671 1000000663 1000000626 1000000520 1000000126 999999978 1000000266 1000000501".split(" ")))
否则你实际上是在比较两个字符串来检查哪个是 bigger/smaller。
在你的情况下,在倒数第 2 次迭代中:
>>> "1000000126" >= "999999978"
False
>>>
因此,自从您的表达式求值为 False
以来,项永远不会被交换。现在,如果您将列表项转换为整数,您应该会看到
>>> 1000000126 >= 999999978
True
我正在尝试实现某种 "Queue",我想在其中尝试对队列的元素进行排序。这里的重点是查看是否可以使用队列和双端队列操作对特定队列进行排序。
我通过比较队列的第一个和最后一个元素,然后将较大的元素附加到新列表,从队列中删除该项目来实现这一点。最后我应该有一个新列表,只要 queue-deque 操作允许就排序。
但是在特定的测试用例中,我的算法对队列中的两个元素进行了错误的比较。
# the queue I am trying to "sort" is:
lst = "1000000842 1000000721 1000000671 1000000663 1000000626 1000000520 1000000126 999999978 1000000266 1000000501".split(" ")
# the new list that I will add my numbers from the start and the end of my queue.
new_lst = []
for x in range(len(lst)-1):
if lst[0] >= lst[-1]:
new_lst.append(lst[0])
del lst[0]
if lst[0] < lst[-1]:
new_lst.append(lst[-1])
del lst[-1]
print(new_lst)
此代码将 new_list 生成为:
['1000000842', '1000000721', '1000000671', '1000000663', '1000000626', '1000000520', '1000000501', '1000000266', '999999978', '1000000126']
它应该在的地方:
['1000000842', '1000000721', '1000000671', '1000000663', '1000000626', '1000000520', '1000000501', '1000000266', '1000000126', '999999978']
我认为问题出现在 "1000000126 999999978 1000000266"
部分。
它比较 "999999978"
和 "1000000126"
并将 "999999978"
添加到新列表而不是 "1000000126"
。
为什么?我还没弄明白。
您遇到了一个 Python 的问题,这个问题很常见,有时会让人非常困惑;即类型转换!
当您拆分列表(或队列)时,我相信您的意思可能是将每个项目的类型转换为整数:
list(map(int, "1000000842 1000000721 1000000671 1000000663 1000000626 1000000520 1000000126 999999978 1000000266 1000000501".split(" ")))
否则你实际上是在比较两个字符串来检查哪个是 bigger/smaller。
在你的情况下,在倒数第 2 次迭代中:
>>> "1000000126" >= "999999978"
False
>>>
因此,自从您的表达式求值为 False
以来,项永远不会被交换。现在,如果您将列表项转换为整数,您应该会看到
>>> 1000000126 >= 999999978
True