如何在Python 3.x中将文本文件中的行附加到多个列表?

3

我的问题是有一个文本文件,其中包含以下内容:

♦J
♣J
♠J
♣8
♦A
♥9
♥J
♥J
♦A
♦K
♦7
♦J
♦7
♦A
♦K
♥7
♣10
♣J
♠A
♦A
♣J
♦7
♠10
♥K
♣9
♥10
♦A
♠8
♠J
♥9
♦8
♠A

我正在尝试将此内容按顺序添加到8个不同的列表中。我有8个不同的列表,以及一个包含所有不同列表的列表,它们设置如下:

deckOne = []
deckTwo = []
DeckThree = []
DeckFour = []
deckFive = []
deckSix = []
deckSeven = []
deckEight = []
deckList = [deckOne, deckTwo, DeckThree, DeckFour, deckFive, deckSix, deckSeven, deckEight]

当我运行程序时,没有出现任何错误,但是我没有得到期望的输出结果。期望的输出结果应该像这样:

[♦J, ♣J, ♠J,8]
[♦A,9, ♥J, ♥J]
[♦A, ♦K,7, ♦J]
[7, ♦A, ♦K,7]
[10, ♣J, ♠A, ♦A]
[♣J,7,10, ♥K]
[9,10, ♦A,8]
[♠J,9,8, ♠A]

但是我现在得到的结果是这样的:
[['♦J', '♦A', '♣10', '♣9'], ['♣J', '♦K', '♣J', '♥10'], ['♠J', '♦7', '♠A', '♦A'], ['♣8', '♦J', '♦A', '♠8'], ['♦A', '♦7', '♣J', '♠J'], ['♥9', '♦A', '♦7', '♥9'], ['♥J', '♦K', '♠10', '♦8'], ['♥J', '♥7', '♥K', '♠A']]

输出结果错误的原因是它将文件中的每四行附加到一个列表中,然后将下四行附加到下一个列表中,以此类推。我试图使用的代码如下:

def hentLagretSpill():
    import codecs
    with codecs.open("game_save.txt", 'rb', encoding="utf-8") as gameGetter:
        count = 0
        for i, l in enumerate(gameGetter):
            count += 1
            deckList[i % 8].append(l.strip())
        print(deckList)

但是我也尝试过这种方法,它可以运行,但是非常冗长:

        x = -1
        for line in gameGetter:
            x += 1
            if x // 4 == 0:
                deckOne.append(line.strip('\n'))
            if x // 4 == 1:
                deckTwo.append(line.strip('\n'))
            if x // 4 == 2:
                DeckThree.append(line.strip('\n'))
            if x // 4 == 3:
                DeckFour.append(line.strip('\n'))
            if x // 4 == 4:
                deckFive.append(line.strip('\n'))
            if x // 4 == 5:
                deckSix.append(line.strip('\n'))
            if x // 4 == 6:
                deckSeven.append(line.strip('\n'))
            if x // 4 == 7:
                deckEight.append(line.strip('\n'))

我该如何解决这个问题?

1
现在这是一个好问题!你已经包含了输入数据和实际以及期望的输出数据。你已经包含了两个版本的代码,尽管其中一个并不完全有效。干得好。 - quamrana
1个回答

4
你现在遇到的问题是%(取模)运算符返回的是余数,而不是像第二个示例中那样的整数除法。你可以通过回到整数除法,并将其作为列表中嵌套列表的索引来解决这个问题。
def hentLagretSpill():
    with open("game_save.txt", 'r', encoding="utf-8") as gameGetter:
        for i, l in enumerate(gameGetter):
            ix = i // 4
            deckList[ix].append(l.strip())
        print(deckList)

# prints:
[['♦J', '♣J', '♠J', '♣8'],
 ['♦A', '♥9', '♥J', '♥J'],
 ['♦A', '♦K', '♦7', '♦J'],
 ['♦7', '♦A', '♦K', '♥7'],
 ['♣10', '♣J', '♠A', '♦A'],
 ['♣J', '♦7', '♠10', '♥K'],
 ['♣9', '♥10', '♦A', '♠8'],
 ['♠J', '♥9', '♦8', '♠A']]

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