如何修复这个数字排序python代码,使其正常工作

2021-12-08 05:12:27 发布

您现在位置:Python中文网/ 问答频道 /正文

这是关于一个数字排序程序。我无法理解join行的语法。你知道吗

#!/usr/bin/env python
import sys
ar=[]
for arg in sys.argv:
    ar.append(arg)  
ar.sort()
print " ".join('%s'%x for x in ar)
2条回答
网友
1楼 ·

我同意join这一行看起来超级时髦。你知道吗

" ".join(...)将获取参数列表(或任何iterable)并为您创建一个字符串,其中所有参数用一个空格分隔。你知道吗

在这种情况下,我只需传入您的排序列表ar。你知道吗

#!/usr/bin/env python

import sys
ar=[]
for arg in sys.argv:
    ar.append(arg)

ar.sort()
print " ".join(ar)

现在我们还有两个问题:

  • 命令行上的第一个参数将是脚本的名称。我会使用sys.argv[1:]而不是仅仅使用sys.argv。你知道吗
  • 您是在对传入的字符串进行排序,而不是对数字进行排序。这将导致类似[1, 11, 13, 2, 3, 4, 5, 56, 9]的排序。为了解决这个问题,我会使用ar.append(int(arg))。你知道吗
网友
2楼 ·

'%s' % x for x in ar就是所谓的generator expression。它生成一堆'%s' % x,其中x被定义为ar中的每个项。" ".join(...)在给.join()的每个项之间放置一个空格。当给定生成器时,它会在生成器生成的每个项之间放置一个空格。如果ar不是字符串列表,则生成器将每个项转换为字符串。然后,我们使用" ".join(...)在每个字符串之间放置一个空格。sys.argv始终是字符串列表,因此不需要生成器表达式。您可以改为使用" ".join(sys.argv)。根据this answer,无论如何使用list comprehension会更有效。您还可以使用str(x)而不是"%s"%x,因为它更容易阅读。你知道吗

相关问题