перечисление подсписков, содержащих строки и целые числа (python)

Вот пример моего списка. Я хотел бы перечислить каждый вложенный список в этом списке и по-прежнему иметь возможность печатать список списков в том же формате. после того, как я перечислю эти вложенные списки, я также хотел бы проиндексировать перечисления, чтобы выполнять поиск по основному списку по номеру. Это возможно?

weaponstore = [['Slingshot', 5, 20],['Leather Sandals', 5, 40],['Wooden Sword', 15, 100]]

Я хочу перечислить список «оружейный магазин», чтобы потом было:

weaponstore = [[0, 'Slingshot', 5, 20],[1,'Leather Sandals', 5, 40],[2,'Wooden Sword', 15, 100]]

person Joe    schedule 20.10.2015    source источник
comment
Я не совсем понимаю, о чем вы спрашиваете, что не так с print weaponstore. Вы можете посмотреть на enumerate(), если вам нужен индекс во время перечисления. Но вам нужно будет предоставить больше контекста для любой дополнительной помощи.   -  person AChampion    schedule 20.10.2015
comment
Я не знаю, что вы подразумеваете под перечислением в этом контексте, и я особенно не знаю, что вы подразумеваете под индексом перечислениями.   -  person TigerhawkT3    schedule 20.10.2015
comment
Зачем вам нужно вставлять индекс в подсписок, вы уже можете получить доступ к подсписку через индекс, например. weaponstore[0].   -  person AChampion    schedule 20.10.2015
comment
для более легкого доступа пользователей, поэтому, когда оружейный магазин содержит 50 вложенных списков, они могут просто ввести номер, соответствующий тому, который они хотят, вместо того, чтобы считать их все, или добавить другую функцию для поиска.   -  person Joe    schedule 20.10.2015
comment
Но weaponstore[10] уже дал бы им прямой доступ к 11-му элементу в списке. Добавление индекса в подсписок не дает им никакого нового способа доступа к списку.   -  person AChampion    schedule 20.10.2015
comment
но они не смогли бы узнать, что такое оружейный склад[10], не считая его. что немного раздражает на мой взгляд.   -  person Joe    schedule 20.10.2015
comment
Добавление индекса в список не помогает (как они узнают индекс без его итерации)... вам может потребоваться изучить другую структуру данных, например dict, например. weaponstore['Slingshot'] даст им прямой доступ к деталям Slingshot.   -  person AChampion    schedule 20.10.2015
comment
хорошо, если список напечатан.. тогда они могут видеть содержимое всех подсписков и чисел... используя эту строку: print '\n'.join('{} {} {}'.format(* местоположение) для местоположения в магазине оружия) я не просил подробностей списка, так как они уже предоставлены. просто пытаюсь получить его, чтобы я мог ввести «1» вместо «Рогатка»   -  person Joe    schedule 20.10.2015


Ответы (4)


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

>>> weaponstore = [['Slingshot', 5, 20],['Leather Sandals', 5, 40],['Wooden Sword', 15, 100]]
>>> for idx,item in enumerate(weaponstore):
...     print('#{}: {}\nQuantity: {}\nCost: {}'.format(idx, *item))
...
#0: Slingshot
Quantity: 5
Cost: 20
#1: Leather Sandals
Quantity: 5
Cost: 40
#2: Wooden Sword
Quantity: 15
Cost: 100

Это перебирает weaponstore с соответствующим индексом, прикрепленным к каждому элементу. Для каждого элемента будет напечатана форматированная строка, которая вставляет переданные аргументы в фигурные скобки.

Вы можете использовать .format(idx+1, ... вместо idx, чтобы список начинался с более естественного 1. Затем вы должны вычесть 1 из любого числа, которое вводит пользователь, чтобы определить, какой элемент он хочет.

person TigerhawkT3    schedule 20.10.2015
comment
@Joe - Если этот ответ решил вашу проблему, вы можете указать это, щелкнув галочку под его оценкой. - person TigerhawkT3; 20.10.2015

Как насчет этого? Использование понимания списка Python.

>>> [[i] +j for i, j in enumerate(weaponstore)]
[[0, 'Slingshot', 5, 20], [1, 'Leather Sandals', 5, 40], [2, 'Wooden Sword', 15, 100]]
person luoluo    schedule 20.10.2015

Используя понимание и enumerate. (Создает новый список.)

[[i] + l for i, l in enumerate(weaponstore)]

Или на месте. (Изменяет магазин оружия.)

for i, l in enumerate(weaponstore):
    l.insert(0, i)
person pacholik    schedule 20.10.2015
comment
Похоже, что на самом деле это не перечисляет список.. хотя это не дает ошибки - person Joe; 20.10.2015
comment
@ Джо, что ты имеешь в виду под перечислением списка? - person AChampion; 20.10.2015
comment
Ваш второй ответ работает отлично, а первый - нет. не знаю почему. - person Joe; 20.10.2015
comment
Первый создает новый список. - person pacholik; 20.10.2015

Если вы ищете способ перехода от идентификатора к оружию в оружейном магазине, вам следует заглянуть в словарь:

weaponstore = {
    id1: ['Slingshot', 5, 20],
    id2: ['Leather Sandals', 5, 40],
    id3: ['Wooden Sword', 15, 100]
}

Что разрешит доступ:

weaponstore[id1]   # once they know what the id is

Теперь вы можете использовать начальные позиции в исходном списке в качестве их идентификатора, но это довольно хрупко и может сломаться, когда вы добавляете/удаляете элемент из магазина. id может быть любым (хешируемым) объектом, поэтому вы можете использовать имя оружия в качестве его идентификатора:

weaponstore = {
    'Slingshot: [5, 20],
    'Leather Sandals': [5, 40],
    'Wooden Sword': [15, 100]
}

Теперь к нему можно получить доступ:

weaponstore['Slingshot']

Вы можете пойти еще дальше и указать детали:

weaponstore = {
    'Slingshot',: {'quantity': 5, 'cost': 20},
    'Leather Sandals': {'quantity': 5, 'cost': 40},
    'Wooden Sword': {'quantity': 15, 'cost': 100}
}

weaponstore['Slingshot]['cost'] == 20

Вы можете перебирать предметы в магазине:

for weapon, details in weaponstore.items():
    print(weapon, details)

Но по вашему описанию очень сложно понять, что вам нужно.

person AChampion    schedule 20.10.2015