【问题标题】:Display the names of each element in my list显示列表中每个元素的名称
【发布时间】:2020-02-13 23:06:32
【问题描述】:

更新:好的,我对这个问题进行了彻底的检查。同样的问题,但现在我实现了自己的代码。

首先,所有 a、b、c、d 和 e 都是数据框中的列,我将一次仅对 3 个组合进行排列,如下所示:

data = list(iter.permutations([a, b, c, d, e], 3)

然后,我执行以下操作以使用数据框中的特定行来查找图表上的单个点:

specData = list(iter.permutations(spec[a.name], spec[b.name], spec[c.name], 
                                  spec[d.name], spec[e.name], 3)

然后,由于我的排列,我将循环显示每个可能的图表。所有这些都适用于我的代码并正确显示它们。我省略了创建图表格式的不需要的部分,因为在这个问题中这些都不重要:

for i in range(len(data)):

    plt.scatter(data[i][0] - data[i][1], data[i][0] - data[I][2], edgecolors=‘b’)

    plt.scatter(specData[i][0] - specData[i][1], specData[i][0] - specData[i][2], 
                edgecolors=‘r’)

在我之前使用数据框的图表中​​,我能够通过这样创建标签并一张一张地绘制它们来显示标签的名称:

    plt.xlabel(a.name + ‘-‘ + b.name)
    plt.ylabel(a.name + ‘-‘ + c.name)

以上标签的输出在图表的 x 和 y 标签上如下所示:

a-b
a-c

现在,我不确定如何像使用数据框一样使用列表显示名称,尤其是当我每次在列表中循环一个新元组时它都会“随机”,所以我不能只需将其硬编码为 a、b、c、d 或 e,因为我不知道。我假设使用字典,但我不确定我会怎么做。

【问题讨论】:

  • 每个排列总是a、b还是c?只是每次的顺序不同?
  • @dijksterhuis 有 5 个,让我们说 a、b、c、d 和 e。编辑:好的,对不起,如果最后不清楚。共有 5 组:a、b、c、d 和 e,每组有 3 种组合。
  • 你的问题太广泛了。首先你问如何打印,编辑后你问一个情节。提出两个单独的问题。
  • @MykolaZotko 它只是印刷品。该情节是我如何使用它的一个例子。绘制名称与为我的代码打印名称相同。我很抱歉造成混乱。

标签: python


【解决方案1】:

您可以使用函数chain.from_iterable() 来迭代每个子列表中的每个元素:

from itertools import chain
from string import ascii_lowercase

c = chain.from_iterable(data)

for i, j in zip(ascii_lowercase, c):
    print(i, j, sep = ' : ')

如果你想建立一个字典,你可以使用函数dict()zip()

c = chain.from_iterable(data)
dct = dict(zip(ascii_lowercase, c))

【讨论】:

    【解决方案2】:

    不确定这是否是您要查找的内容,但您可以将每个 tuple 匹配为 key 并根据需要添加值。即:

    data = [[(0, 1, 2), (3, 4, 5), (6, 7, 8)], 
            [(0, 1, 2), (6, 7, 8), (3, 4, 5)], 
            [(3, 4, 5), (6, 7, 8), (0, 1, 2)]]
    
    dict1 = {(0, 1, 2): 'a',  (3, 4, 5): 'b',  (6, 7, 8): 'c'}
    
    for row in data:
        print(', '.join(['%s:%s' % (dict1[elem], elem) for elem in row if elem in dict1]))
    

    【讨论】:

    • 我确实希望它有点像这样,但是,我认为拥有两个 for 循环并不是最好的主意。我可以单独创建一个字典而没有列表吗?
    【解决方案3】:

    试试这个:

    from string import ascii_lowercase
    alphabet=0
    for i in data:
       for j in i:   
           print(ascii_lowercase[alphabet] + " : " + str(j))
           alphabet += 1
    

    我还有一些问题,比如如果您的列表长度超过字母大小怎么办?此外,如果您只想打印而不是存储,则此答案有效。

    【讨论】:

    • data[i] 不是有效元素。在这种情况下,在第一个循环中i 将是[(0, 1, 2), (3, 4, 5), (6, 7, 8)],而j 将尝试采用data[[(0, 1, 2), (3, 4, 5), (6, 7, 8)]] 的值。我想你想说for j in i:(0,1,2)
    【解决方案4】:

    您可以使用您的data 压缩named_list,并为每个数据元素指定一个名称。

    代码:

    from string import ascii_lowercase
    
    
    def do():
        data = [[(0, 1, 2), (3, 4, 5), (6, 7, 8)],
                [(0, 1, 2), (6, 7, 8), (3, 4, 5)],
                [(3, 4, 5), (6, 7, 8), (0, 1, 2)]]
    
        featured_list = list(map(lambda x: list(zip(ascii_lowercase, x)), data))
    
        for items in featured_list:
            for item in items:
                print(f"{item[0]}: {item[1]}")
    
    
    if __name__ == '__main__':
        do()
    

    输出:

    a: (0, 1, 2)
    b: (3, 4, 5)
    c: (6, 7, 8)
    a: (0, 1, 2)
    b: (6, 7, 8)
    c: (3, 4, 5)
    a: (3, 4, 5)
    b: (6, 7, 8)
    c: (0, 1, 2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-16
      • 2014-04-09
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2013-02-17
      相关资源
      最近更新 更多