在python中打印索引名称

时间:2015-10-09 14:35:04

标签: python list indexing

我想知道如何在列表和子列表中输出每个索引(和子索引)的名称而不是值。

例如,假设我有一个主列表,其中包含3个其他列表,每个列表包含5个子列表。这是一个澄清的小例子:

List1 = [SubList1, SubList2, SubList3, SubList4, SubList5]
List2 = [Apple, Banana, Orange, Pear, Grape]
List3 = [Red, Yellow, Orange, Green, Purple]


Lists = [List1, List2, List3]

MainList = [Lists]

如何打印' List1'?

当我输入

MainList[0][0]

输出

[SubList1, SubList2, ..., Sublist5]

我想要索引的实际名称,而不是它的值。

我考虑过使用字典键,但我用于XML转换的报表生成器将所有数据输出到列表中。这是否意味着我别无选择,只能修改我的报告生成器脚本以将数据输出到词典中?

4 个答案:

答案 0 :(得分:2)

尝试将dict()用于此目的:

List1 = ['SubList1', 'SubList2', 'SubList3', 'SubList4', 'SubList5']
List2 = ['Apple', 'Banana', 'Orange', 'Pear', 'Grape']
List3 = ['Red', 'Yellow', 'Orange', 'Green', 'Purple']


xd = {'List1': List1, 'List2': List2, 'List3': List3}

print xd['List1']

for k, v in xd.iteritems():
    if v == List1:
        print k

>>> ['SubList1', 'SubList2', 'SubList3', 'SubList4', 'SubList5']
>>> List1

答案 1 :(得分:1)

list对象没有name属性,你应该使用pandas.Series如下:

import pandas as pds
List1 = pds.Series([SubList1, SubList2, SubList3, SubList4, SubList5],name='List1')
List2 = pds.Series([Apple, Banana, Orange, Pear, Grape],name='List2')

你找到这样的名字:

print List1.name,List2.name

列表列表成为pandas.DataFrame:

Lists = pds.DataFrame([List1, List2, List3])

要回答您的问题,请按以下步骤操作:

- 每个子列表成为一个系列

Sublist = pds.Series([...],name='Sublist')

- 每个列表成为数据帧:

List = pds.DataFrame([Sublist1,Sublist2,..])

- “the”列表成为一个词典:

Lists = {'List1' : List1,
         'List2' : List2,
         ...
         }

- 你得到了名字:

for name_list,list in Lists.items(): 
     name_list,list.columns

答案 2 :(得分:1)

快速解决方案:

class NamedList(list):
    __slots__ = ['__name__'] # optimisation, can be ommited
    def __init__(self, name, *args):
        super().__init__(*args)
        self.__name__ = name
    def __repr__(self):
        return "%s(%r, %s)" % (type(self).__name__, self.__name__, super().__repr__())

test = NamedList('test', [1, 2, 3])
print(test)
print(test.__name__)

输出:

NamedList('test', [1, 2, 3])
test

答案 3 :(得分:1)

如果您的列表始终存储为变量,您可以使用某种标识字典检索其名称(遗憾的是标准库中没有):

names = IdentityWeakKeyDict((obj, name for name, obj in locals().items()))

names现在应该将对象映射到他们的名字。