繁体   English   中英

在python中打印索引名称

[英]print index name in python

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

例如,假设我有一个主列表,其中有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转换的报表生成器将所有数据输出到列表中。 这是否意味着我别无选择,只能修改报表生成器脚本以将数据输出到词典中?

尝试使用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

你好像误解了。 示例中的List1是变量名称。 它不存储在Lists数组中,只存储其值。 因此,您不会从列表中获取List1。 数组索引是整数,列表中List1的索引是0.正如另一位评论者建议您可能希望将列表结构转换为字典。

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

print(Lists.keys())

list对象没有名称属性,你应该使用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

快速解决方案

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

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

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

names现在应该将对象映射到它们的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM