【问题标题】:When sys.stdin.readline().split() is sorted, the integer sequence is weird [duplicate]当 sys.stdin.readline().split() 排序时,整数序列很奇怪[重复]
【发布时间】:2020-12-15 13:38:29
【问题描述】:

如果给定两个与数组匹配问题对齐的数组,则组合这些数组,然后按大小顺序重新输出它们。我带来了一个 sys 而不是 input 来获得一个整数输入。结果是 11 不是最后一个,而是下一个。为什么会这样?

输入:

5 4
2 3 6 7 8
1 8 9 11

想要的结果:

1 2 3 6 7 8 8 9 11

代码:

import sys

a,b = input().split()
a = int(a)
b = int(b)

li1 = sys.stdin.readline().split()
li2 = sys.stdin.readline().split()
li = li1+li2
li.sort()


for i in range(a+b):
    print(li[i], end=" ")

当前结果:

1 11 2 3 6 7 8 8 9

【问题讨论】:

  • 您有字符串列表"1" "11" "2" "3" "6" "7" "8" "8" "9",而不是数字1 11 2 3 6 7 8 8 9 - 当您对字符串进行排序时,"11" 低于"2",因为它比较第一个字符"1"(在“11 ") 与第一个字符 "2". You have to convert all elements on list to int()`
  • 您的输入数组看起来像是全部显示在一行中。您可以将其放在代码块中,以更清楚地了解实际传递了哪些行。此外,一般不建议将sys.stdin.readlineinput 混合使用。

标签: python


【解决方案1】:

这是因为您的列表 li1li2 包含字符串数据而不是整数。 您正确地将 ab 转换为 int 值,但列表仍然是字符串。

这导致您的列表在lexicographic order 中排序。使用任何方法将这些值转换为int 以获得您的答案。

li1 = list(map(int, sys.stdin.readline().split())) # Using map
li2 = sys.stdin.readline().split()
li2 = [int(x) for x in li2]                        # Using list comprehension

【讨论】:

  • 哇,非常感谢你这么详细地告诉我!!你一直很有帮助。 XD
  • 这很酷。然后你会想要接受答案并关闭问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多