2015-10-20 2 views
1

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

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

Я хочу, чтобы перечислить список 'weaponstore' так, чтобы потом было бы:

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

Я не совсем уверен, что вы спрашиваете, что не так с 'print weaponsonstore'. Вы можете посмотреть 'enumerate()', если вам нужен индекс, когда вы перечисляете. Но вам нужно будет предоставить больше контекста для любой дополнительной помощи. – AChampion

+0

Я не знаю, что вы подразумеваете под «перечислением» в этом контексте, и я особенно не знаю, что вы подразумеваете под «индексом по перечислениям». – TigerhawkT3

+0

Зачем вам нужно вставлять индекс в подсписку, вы уже можете получить доступ к подсписку с помощью индекса, например. 'Weaponstore [0]'. – AChampion

ответ

0

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

>>> 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 из любого числа, которое пользователь вводит, чтобы определить, какой элемент он хочет.

+0

спасибо! удивительный ответ – Joe

+0

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

+0

извините, человек. новый для сайта. – Joe

0

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

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

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

for i, l in enumerate(weaponstore): 
    l.insert(0, i) 
+0

Это, похоже, фактически не перечисляет список. , хотя он не дает ошибку – Joe

+0

@Joe Что вы имеете в виду, перечислив список? – AChampion

+0

Ваш второй ответ работает отлично, но первый - нет. не знаю почему. – Joe

0

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

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

Если вы ищете средство получения от идентификатора к оружию в weaponstore то вы должны смотреть в Словаре:

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 может быть любым (hashable) объекта, так что вы могли бы использовать имя оружия, как это идентификатор:

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) 

Но это действительно сложно сказать, что вам нужно от вашего описания

Смежные вопросы