列表中不能有符号吗?

时间:2016-09-27 19:14:47

标签: python

我之前没有做过python(只有javascript)。我发现文档外星人和list.pop()上的其他stackoverflow帖子更加神秘!

我的args是'0','0','0','0','0000'

这是我的代码:

i=['.','.','.',':','']

host=''
for v in sys.argv[1:]:
    host=host+str(v)+str(i.pop())
host=host[:-1]

print host

我正试图获得'0.0.0.0:0000'

但我得到:IndexError: pop from empty list

https://repl.it/DirH/1

我问的原因是我找不到任何SO问题,其中列表是符号列表以简单的书写形式声明!

3 个答案:

答案 0 :(得分:4)

可以在列表中放置任何你想要的东西。您的sys.argv可能太长(即使在切掉第一个元素之后)。

e.g。如果len(sys.argv[1:]) == 6len(i) == 5比到for循环中的最后一个元素时,i将为空。您在链接中发布的代码就是这种情况。

另请注意,您最好使用zip

lst = ['.','.','.',':','']
for v, ii in zip(sys.argv[1:], lst):  # possibly reversed(i) if you meant to pop off the left side of the list rather than the end?
    host += host + str(v)+ str(ii)

或(更有效率):

host = ''.join(j+ii for j, ii in zip(sys.argv[1:], lst))

当然,如果输入列表的长度不正确,您仍然可能会输出不正确的输出(即使使用zip) - 但是,您不会得到异常,只会缩短输出字符串比你可能期望的那样,因为zip在其中一个iterables耗尽时截断。

答案 1 :(得分:2)

a=['script','location','00','11','22','33','4444']
i=['.','.','.',':','',''] # added an extra ''

host=''

for v in a[1:]:
    host=host+str(v)+i.pop(0)

print (host)

这样的东西?改变了pop(0)因为你想要开始而不是结束。你的问题是你试图弹出比现在更多的东西。

答案 2 :(得分:0)

看起来你想要的很简单:使用点连接所有内容,但最后一部分,端口号必须用冒号连接。这是另一种方法:

port = sys.argv.pop()
host = '{}:{}'.format('.'.join(sys.argv[1:]), port)