Вопрос: В списке нет символов?


Я раньше не делал python (только javascript). Я нахожу, что иностранец документов и другие записи stackoverflow list.pop() еще более загадочным!

мои аргументы '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


источник


Ответы:


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



Вы Можно  добавьте все, что угодно в списке. Вероятно, ваш sys.argv слишком длинный (даже после отрезания первого элемента).

например если 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 усекает, когда один из итераций исчерпан.


4



Кажется, что вы хотите просто: соедините все с помощью точки, но в последней части номер порта должен быть соединен двоеточием. Вот еще один способ сделать это:

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

0