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

时间:2016-04-06 21:19:19

标签: python join

这是关于数字排序程序。我无法理解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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我同意join行看起来非常时髦。

" ".join(...)将获取一个列表(或任何可迭代的)参数,并为您创建一个字符串,其中所有参数参数由一个空格分隔。

在这种情况下,我只会传递您的排序列表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))