创建列表 - 创建比想要的更多级别的列表

时间:2018-03-31 17:44:52

标签: python python-3.x

我能够成功地从名为donnes的列表中添加名为liste_dominos元素的列表。但是,似乎我在列表中创建了一个额外的级别。

打印donnes时,而不是输出:

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

我会得到:

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

因此,如果我得到每个玩家的列表......而不是这个输出: [[5, 3], [6, 3], [2, 0], [4, 2], [2, 2], [6, 6]]

我会得到: [[[5, 3], [6, 3], [2, 0], [4, 2], [2, 2], [6, 6]]]

列表donnes应该按[[],[]]格式化。每个元素代表一个玩家,并在其子列表中代表他们所拥有的多米诺骨牌列表。

这是代码。

import random

liste_dominos = [[6, 6], [6, 5], [6, 4], [6, 3], [6, 2], [6, 1], [6, 0], [5, 5], [5, 4], [5, 3], [5, 2], [5, 1], [5, 0], [4, 4], [4, 3], [4, 2], [4, 1], [4, 0], [3, 3], [3, 2], [3, 1], [3, 0], [2, 2], [2, 1], [2, 0], [1, 1], [1, 0], [0, 0]]
random.shuffle(liste_dominos)
no_players = 2
if int(no_players) == 2:
    donnes = [[] for i in range(int(no_players))]
    for x in range(no_players):
        donnes[x].append(liste_dominos[:6])
        del liste_dominos[:6]
    print(donnes[0])
    print(donnes[1])
    print(donnes)

打印仅用于指示我是否获得正确的结果。我稍后将使用donnes列表执行其他操作,因此需要以上述格式获取它。

3 个答案:

答案 0 :(得分:3)

即使有更好的方法,正在发生的事情是你要将从liste_dominos [:6]返回的内容附加到列表中,这基本上是该范围中包含的元素的列表这是一个事实上[[...],..,[...]]

返回的列表

使用extend来追加列表的内部元素可以解决这个问题:

import random

liste_dominos = [[6, 6], [6, 5], [6, 4], [6, 3], [6, 2], [6, 1], [6, 0], [5, 5], [5, 4], [5, 3], [5, 2], [5, 1], [5, 0], [4, 4], [4, 3], [4, 2], [4, 1], [4, 0], [3, 3], [3, 2], [3, 1], [3, 0], [2, 2], [2, 1], [2, 0], [1, 1], [1, 0], [0, 0]]
random.shuffle(liste_dominos)
no_players = 2
if int(no_players) == 2:
    donnes = [[] for i in range(int(no_players))]
    for x in range(no_players):

        # Changed to extend instead of append
        # It can be changed to += also
        donnes[x].extend(liste_dominos[:6])
        del liste_dominos[:6]

    print(donnes[0])
    > [[1, 0], [6, 5], [4, 3], [5, 2], [6, 3], [5, 5]]

    print(donnes[1])
    > [[5, 1], [3, 2], [4, 1], [2, 1], [3, 0], [2, 2]]

    print(donnes)
    > [[[1, 0], [6, 5], [4, 3], [5, 2], [6, 3], [5, 5]], [[5, 1], [3, 2], [4, 1], [2, 1], [3, 0], [2, 2]]]

答案 1 :(得分:1)

当您真正想要append()时,您正在使用extend()

append:在最后添加对象。

x = [1, 2, 3]
x.append([4, 5])
print (x)

为您提供:[1, 2, 3, [4, 5]]

extend:通过附加迭代中的元素来扩展列表。

x = [1, 2, 3]
x.extend([4, 5])
print (x)

为您提供:[1, 2, 3, 4, 5]

你想做

donnes[x].extend(liste_dominos[:6])

Original extend vs. append answer here

答案 2 :(得分:0)

使用列表理解

可以更轻松地完成同样的工作
.footer-text {
    display:inline-block;
    vertical-align: top;
    font-size: 12px;
    list-style-type: none;
}