Присвоение одного и того же идентификатора парам имен

#python #list

#python #Список

Вопрос:

 nameList = ["sam", "tom", "jack", "james" , "robbie", "Lewis"]
id = 1
  

Существует список имен и идентификатор, инициализированный как 1.

Я хочу присвоить идентификатор имени для первых 2 имен в списке, а затем увеличить идентификатор.

Мой фрагмент кода до сих пор:

 nameList = ["sam", "tom", "jack", "james" , "robbie", "Lewis"]
id = 1
for names in nameList:
    print names   ","   str(id)
    id = id   1
  

Желаемый результат:-

 sam,1
tom,1
jack,2
james,2
robbie,3
Lewis,3
  

Любая помощь? Спасибо

Ответ №1:

Вы можете попробовать использовать enumerate и проверить, является ли индекс строки четным. Если это так, увеличьте id :

 nameList = ["sam", "tom", "jack", "james" , "robbie", "Lewis"]
id = 0
for i, names in enumerate(nameList):
    if i % 2 == 0:   # if 'i' is even
        id = id   1   # or id  = 1, both are equivalent
    print names   ","   str(id) # if all elements are strings, 'str()' is not required
  

Обратите внимание, что на каждой итерации i будут приниматься числа в диапазоне [0, length-1]

Ответ №2:

Вы можете просто перебирать список с enumerate помощью и с помощью (index / 2) 1 , вы можете получить фактическое значение, которое хотите распечатать

 nameList = ["sam", "tom", "jack", "james", "robbie", "Lewis"]
for idx, item in enumerate(nameList):
    print "{}, {}".format(item, (idx / 2)   1)
  

Вывод

 sam, 1
tom, 1
jack, 2
james, 2
robbie, 3
Lewis, 3
  

Комментарии:

1. Мне нравится этот ответ лучше, чем принятый. Не обижайтесь на принятое, но это проще. 1

2. Отличный ответ, просто хотел указать на несоответствие: (index 2) / 1 перевернуто плюс и деление.

Ответ №3:

 for names in nameList:
    print names   ","   str((id 1)/2)
    id = id   1
  

Ответ №4:

 nameList = ["sam", "tom", "jack", "james" , "robbie", "Lewis"]

def counter(start, duplicate_amt=1):
    while True:
        for _ in range(duplicate_amt):
            yield start
        start  = 1

for name, _id in zip(nameList, counter(1, 2)):
    print("{},{}".format(name, _id))
  

Я предпочитаю этот способ, потому что, если вы хотите увеличить его после x вместо 2 итераций, вы можете изменить его на counter(1, x)

Ответ №5:

 id=1
c=0
for name in nameList:
    if c<=2:
        c =1
    else:
        id =1
        c=1
    print "{}, {}".format(name,id)