我之前没有做过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
我问的原因是我找不到任何SO问题,其中列表是符号和列表以简单的书写形式声明!
答案 0 :(得分:4)
你可以在列表中放置任何你想要的东西。您的sys.argv
可能太长(即使在切掉第一个元素之后)。
e.g。如果len(sys.argv[1:]) == 6
和len(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)