添加元组列表到另一个并打印i的问题

2024-06-16 08:27:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过比较元组第一项和指定的int()来打印元组列表,但是由于某种神秘的原因,第二项中带0的元组消失了

代码:

n_vertical = 3
n_horizontal = 3
for x in range(0,n_vertical):
    for y in range(0,n_horizontal):
        area.append((x,y,0))

print(area)
print('''
''')
def representacao_do_mapa(modo):
    if modo == 1:
        n=0
        l_c = []
        for x in area:
            if x[0] == n:
                l_c.append(x)
            else:
                print(l_c)
                l_c = []
                n+=1
representacao_do_mapa(1)

screenshot of output

文本输出:

[(0, 0, 0), (0, 1, 0), (0, 2, 0)]
[(1, 1, 0), (1, 2, 0)]

Tags: inforifrangeareadoint元组
1条回答
网友
1楼 · 发布于 2024-06-16 08:27:49

问题

创建新列表时,您正在丢弃元组x

        if x[0] == n:
            l_c.append(x)       # here you append x
        else:
            print(l_c)          # here you print but do nothing with x
            l_c = []            # list empty, x is missing
            n+=1

解决方案

def representacao_do_mapa(modo):
    if modo == 1:
        n=0
        l_c = []
        for x in area:
            if x[0] == n:
                l_c.append(x)
            else:
                print(l_c)
                l_c = [x]       # fix here
                n+=1
        print(l_c)              # fix here 

representacao_do_mapa(1)

除此之外-您的最后一个列表不会被打印,因为最后的l_c永远不会进入代码的打印部分-您必须将其添加到for循环区域之外。你知道吗

输出(对于n_vertical = 3n_horizontal = 3

[(0, 0, 0), (0, 1, 0), (0, 2, 0)]
[(1, 0, 0), (1, 1, 0), (1, 2, 0)]
[(2, 0, 0), (2, 1, 0), (2, 2, 0)]

优化:

您可以使用列表理解和列表分解来缩短代码:

n_vertical = 3
n_horizontal = 3
area = [ (x,y,0) for x in range(n_horizontal) for y in range(n_vertical )]
# create with inner lists
area2 = [ [(x,y,0) for x in range(n_horizontal)] for y in range(n_vertical)]

print(area)

# print each inner list on new line
print(*area2, sep="\n")

或者可以直接从area打印:

print(* (area[i*n_horizontal:i*n_horizontal+n_horizontal] 
         for i in range(n_vertical)) , sep="\n")

使用生成器表达式将area切片为n_horizontal个片段。你知道吗


有关生成器/列表表达式的详细信息:Generator Expressions vs. List Comprehension

关于组块列表的更多信息:How do you split a list into evenly sized chunks?

更多关于列表切片:Understanding slice notation

有关打印的详细信息:https://docs.python.org/3/library/functions.html#print

相关问题 更多 >