【问题标题】:Print name of list, instead of list打印列表名称,而不是列表
【发布时间】:2021-08-10 15:17:10
【问题描述】:

我有一个列表列表:

sensors = [[] for i in range(8)]

我正在从此列表中创建一个到文本文件的导出。

我想按照子列表的内容打印每个列表的名称。 例如,我想要:

sensors[0]
------------
1
2
3

sensors[1]
------------
4
5
6

sensors[0] = [1,2,3] 和 sensors[1] = [4,5,6] 的位置。

到目前为止我已经尝试过了:

with open(fileName, 'w') as f:
   for myList in sensors:
      f.write("%s\n" % myList)
      f.write("---------------------------------\n")
      for item in myList:
         f.write("%s\n" % item)

但是,f.write("%s\n" % myList) 给我的不是数组的名称,而是它的内容。

所以我明白了:

[1,2,3]
------------
1
2
3
    
[4,5,6]
------------
4
5
6

这是可以理解的。但是在这段代码 sn-p 中,我如何替换 f.write("%s\n" % myList) 行,以便打印子列表的名称?

编辑: 这是我根据 Rahul 的建议使用的代码:

with open(fileName, 'w') as f:
         for myList in range(len(sensor)):
              f.write("%s" % namestr(sensor).strip() + '[' + str(myList) + ']\n')
              f.write("---------------------------------\n")
              for item in myList:
                 f.write("%s\n" % item)

但是,我得到了这个错误:

   for item in myList:
TypeError: 'int' object is not iterable

【问题讨论】:

    标签: python-3.x list file


    【解决方案1】:

    如果我完全理解您的问题,请告诉我。所以你想得到变量名而不是它的值。

    def namestr(obj):
       return [name for name in globals() if globals()[name] is obj][0]
    
    var = 'Hello'
    print(var)
    print(namestr(var))
    

    输出

    Hello
    var
    

    好吧,我知道上面的逻辑没有意义,因为它只是遍历全局命名空间并返回我们需要的内容。

    但在您的情况下,您可能需要像上面这样的子列表名称。但是当知道sensors[0] 不是占位符或变量时。它只是程序引用的内存位置。

    编辑

    但是我们可以做一些字符串操作。

    sensors = [[] for i in range(8)]
    sensors[0] = [1,2,3]
    sensors[1] = [4,5,6]
    print(sensors)
    
    def namestr(obj):
       return [name for name in globals() if globals()[name] is obj][0]
    
    
    fileName = 'somefile'
    with open(fileName, 'w') as f:
       for ind in range(len(sensors)):
          f.write("%s" % namestr(sensors).strip() + '[' + str(ind) + ']\n')
          f.write("---------------------------------\n")
          for item in sensors[ind]:
             f.write("%s\n" % item)
    

    输出文件内容

    sensors[0]
    ---------------------------------
    1
    2
    3
    sensors[1]
    ---------------------------------
    4
    5
    6
    sensors[2]
    ---------------------------------
    sensors[3]
    ---------------------------------
    sensors[4]
    ---------------------------------
    sensors[5]
    ---------------------------------
    sensors[6]
    ---------------------------------
    sensors[7]
    ---------------------------------
    

    我做了什么? 我刚刚使用我在程序中创建的namestr 函数获得了您的列表名称,然后仔细获取了列表的索引和一些基本的字符串操作。

    希望它会有所帮助。

    【讨论】:

    • 我不想要传感器[0]的内容,我想要字符串传感器[0]。
    • 好吧,你可以做一些字符串处理。因为它不是一个普遍的问题。我已经更新了答案。
    • 非常感谢您的努力和您的好意。欢迎来到本站!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2017-03-20
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多