我是Python的新手,在我的一项练习中,我需要编写一个程序,该程序将在列表中存储输入到控制台的5个整数,然后打印其长度,列表类型并打印排序后的列表。 / p>
到目前为止,我可以将输入限制为5个整数的最优雅的方式是:
a = [int(x) for x in input().split()]
print(len(a), type(a), sorted(a))
但是,我无法理解如何添加命令以仅存储用户在列表中输入的5个数字,而忽略其余部分。
我考虑过将int(input())用于range(5)中的x,但是它不起作用,而且我也不知道该如何添加拆分。
我知道有一种方法可以使用map()将项目存储在列表中,但是我在课程中还没有遇到过,因此,如果有一种更简单有效的方法可以使用list(map ()),如果有人可以引导我,我将不胜感激。
我只是开始学习,所以任何建议都将不胜感激。谢谢!
答案 0 :(得分:1)
您有两个选择:
后者会给用户带来更好的反馈,而前者会给用户带来惊喜(行尾的数字发生了什么?)
忽略其余部分很容易;分割您创建的列表; [:5]
创建一个仅包含(最多)5个值的新列表:
a = [int(x) for x in input().split(maxsplit=5)[:5]]
以上内容还告诉str.split()
仅拆分5次,以避免进一步的工作。
根据命令行工具的约定,错误消息应写入sys.stderr
,并且您将使用非零退出代码退出:
a = [int(x) for x in input().split()]
if len(a) > 5: # or len(a) != 5 if you must have exactly 5 values
print('No more than 5 values, please!', file=sys.stderr)
sys.exit(1)
当您使用库来处理命令行解析时,该库通常包括一个用于处理错误通信和退出的函数(例如argparse
,在该库中您将使用parser.error(message)
来指示退出并一步一步退出。)
答案 1 :(得分:1)
通过str.split
的maxsplit
参数将拆分结果限制为前5个数字。
然后切片,直到但不包括结果列表的最后一个元素。
a = [int(x) for x in input().split(maxsplit=5)[:-1]]
请注意,您也可以使用list
+ map
来重写它:
a = list(map(int, input().split(maxsplit=5)[:-1]))
答案 2 :(得分:0)
这只会在列表中保留前5个项目:
a = [int(x) for x in input().split()[:5]]
使用此方法可以列出列表中所有索引小于5的项目。