以字符串网格格式打印集合列表

3
这是我得到的文本文件:
......B..
.........
...A.....
.........
.......D.
.........
.C.......
.....E...
.........

从这段文本中,我为了获取文本文件中每个点最接近的字母,制作了以下元素。

location_alpha ={(2, 3): 'A', (0, 6): 'B', (6, 1): 'C', (4, 7): 'D', (7, 5): 'E'}

location_allpoint = [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (8, 0), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8)]

我尝试的是将txt文件中的所有点变成最接近的字母,并以字符串格式打印出来。
   aaaabbBbb
   aaaaabbbb
   aaaAaabdd
   aaaaaaddd
   ccaaaddDd
   cccceeddd
   cCcceeedd
   ccceeEeee
   ccceeeeee

为了实现这个目标,我得到的是txt文件中每个项目的最近点: 我尝试做的是首先将列表中每个元素的小写打印为行*列字符串网格格式,就像上面的例子一样,然后将原始字母的索引更改为大写。
 for i in nearest_alphabet_from_point: 
      if len(i) ==2: # one that comes first lexicographically must be used in case ex){'A', 'C'} ==> 'A'

nearest_alphabet_from_point =[{'A'}, {'A'}, {'A'}, {'A'}, {'B'}, {'B'}, {'B'}, {'B'}, {'B'}, {'A'}, {'A'}, {'A'}, {'A'}, {'A'}, {'B'}, {'B'}, {'B'}, {'B'}, {'A'}, {'A'}, {'A'}, {'A'}, {'A'}, {'A'}, {'B'}, {'D'}, {'D'}, {'A', 'C'}, {'A'}, {'A'}, {'A'}, {'A'}, {'D', 'A'}, {'D'}, {'D'}, {'D'}, {'C'}, {'C'}, {'A', 'C'}, {'A'}, {'A'}, {'D'}, {'D'}, {'D'}, {'D'}, {'C'}, {'C'}, {'C'}, {'C'}, {'E'}, {'E'}, {'D'}, {'D'}, {'D'}, {'C'}, {'C'}, {'C'}, {'C'}, {'E'}, {'E'}, {'E'}, {'D'}, {'D'}, {'C'}, {'C'}, {'C'}, {'E'}, {'E'}, {'E'}, {'E'}, {'E'}, {'E'}, {'C'}, {'C'}, {'C'}, {'E'}, {'E'}, {'E'}, {'E'}, {'E'}, {'E'}]

但是我从第一步就无法将其以字符串网格格式打印出来。如何做到这一点?

这是来自 https://adventofcode.com/2018/day/6 吗? - Alex
@Alex 不是这样的,但它看起来很相似,除了这一部分 ==> 以 . 显示的位置与两个或多个坐标的距离相等,因此它们不被视为最接近任何一个,而我需要按字典顺序选择最接近的字母。 - goldenasian
@iamvegan 是的,它代表了location_allpoint中每个位置的每个字符。 - goldenasian
@Alex,请从原始文本文件中提取以下内容:aaaabbBbb aaaaabbbb aaaAaabdd aaaaaaddd ccaaaddDd cccceeddd cCcceeedd ccceeEeee ccceeeeee,并将其打印为字符串类型的网格并填充点。 - goldenasian
@Alex,抱歉排版有些不好,我刚刚已经纠正了。 - goldenasian
显示剩余4条评论
1个回答

4
如果你只想打印出网格,为什么不直接像这样做呢?
N = len(nearest_alphabet_from_point)
W = 9
L = N//W
ind = 0
for i in range(L):
    for j in range(W):
        temp = list(nearest_alphabet_from_point[ind])
        ind += 1
        print(temp[0],end='')
    print('')

输出

AAAABBBBB
AAAAABBBB
AAAAAABDD
AAAAAADDD
CCAAADDDD
CCCCEEDDD
CCCCEEEDD
CCCEEEEEE
CCCEEEEEE

如果您想构建一个列表类型的网格,则可以像这样操作:
N = len(nearest_alphabet_from_point)
W = 9
L = N//W
ind = 0
grid = []
for i in range(L):
    row = []
    for j in range(W):
        ch = list(nearest_alphabet_from_point[ind])[0]
        if (i,j) not in location_alpha:
            ch = ch.lower()
        row.append(ch)
        ind += 1
    grid.append(row)

1
我尝试了,但是我想把点的位置改成小写字母,但是没能搞明白...而且我真的不理解这一行代码是怎么工作的 ==> print(temp[0], end='') - goldenasian
1
如果 (i,j) 不在 location_alpha 中,那么它应该是一个点,对吧? - iamvegan
1
我想我弄明白了,只是又定义了一个“do it”的函数。谢谢! - goldenasian
我知道如何将列表制作成网格,但是在将其转换为字符串类型方面遇到了困难,是否创建新的函数来制作网格是最好的选择? - goldenasian
1
哦,它帮了很大的忙,谢谢。只需使用join将其更改为字符串即可,非常感谢! - goldenasian
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接