2016-09-27 69 views
3

我以前没有做过python(只有javascript)。我在list.pop()找到docs外星人和其他stackoverflow帖子更加神秘!列表中不能有符号吗?

我ARG游戏'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问题,其中列表是符号列表以简明书写形式声明!

+2

你知道'pop()'从结尾拉,而不是开始,对吗?如果你想开始,试试'pop(0)'。 –

+2

*“其中列表是符号,列表以纯文字形式声明!”* - 什么?这些是大多数单个字符串,我想你正在试图描述一个列表文字。这是**没有什么不同** JS数组文字。 – jonrsharpe

+0

是啊流行音乐从结尾拉动(打算在稍后解决,一旦我找出从一开始就有什么转变) –

回答

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) 

是这样的?更改弹出(0)导致你想要开始而不是结束。你的问题是你试图弹出更多比。

+0

我的代码是一团糟,但是这个修复! –

4

可以把你想要的东西放在列表中。很可能你的sys.argv太长(即使在切断第一个元素后)。

例如如果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其中一个迭代器耗尽时会截断。

+1

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

+0

@ Mr.goosberry - 不幸的是,OP用于列表的名字是'i'。也许我应该只是为了清晰起见而改变名字... – mgilson

+0

@MosesKoledoye - 我试图慢下来,并没有立即引入_too_。这就是说,在我使用'+ ='来构建一个字符串的时候留下一个答案非常困难,所以我添加了'''.join'版本...... – mgilson

0

看来你想要的是简单的:加入所有使用点,但最后一部分,端口号必须通过冒号加入。这是另一种方法:

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