簡體   English   中英

如何將 append 行從文本文件到 python 中的多個列表 3x

[英]How to append lines from text file to multiple lists in python 3x

我的問題是我有一個包含以下內容的文本文件:

♦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

我正在嘗試將 append 按從下到下的順序排列到 8 個不同的列表中。 我有 8 個不同的列表和一個列表,其中包含它們設置的所有不同列表,如下所示:

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

運行程序時我沒有收到任何錯誤,但是我沒有得到我期望的 output。 預期的 output 將如下所示:

[♦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']]

這個 output 是錯誤的,因為它將文件中的每 4 行而不是 4 行附加到一個列表,然后將下 4 行附加到下一個列表,依此類推。 我試圖用來執行此操作的代碼是:

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'))

我將如何解決這個問題?

您看到的問題是% (模)運算符返回余數,而不是第二個示例中的 integer 除法。 您可以通過返回 integer 分區並將其用作列表列表中的索引來修復它。

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']]

另一種方式,使用itertools.islice

假設您在f中有文件內容

from itertools import islice
to_split=iter(f.strip().splitlines())
split_list=[list(islice(to_split,4)) for _ in range(8)]
for i in split_list:
    print(i)

再三考慮,您可以使用列表切片在沒有islice的情況下這樣做

split_list=[to_split[split_idx:split_idx+4] for split_idx in range(0,len(to_split),4)]

這打印

['♦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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM