2013-06-28 66 views
0

我有一個列表我用作數據容器。我已經把所有的調試代碼都留下了,所有的東西都放在控制檯上,這樣我就可以通過它了,這解釋了一些更多的冗餘打印語句。列表分塊成子列表

它是由通過迭代和使一個長列表,看起來像創建:

[['Arsenal', 2.47, 1.2, 0.89, 'Chelsea', 2.15, 0.8, 1.21,...

的子列表都是均勻的長度(9種元素)的,所以就用以下至塊它,這是taken from here

# This function should chunk the 'file', as when we run the above code, 
# we'll end up with one incredibly long list that contains every team on the same line 
def chunker(seq, size): 
    return (seq[pos:pos + size] for pos in xrange(0, len(seq), size)) 

for group in chunker(league_stats, 9): 
    print repr(group) 
    final_stats.append(repr(group)) 
    print "printing final stats" 
    print final_stats 
    print "and here's a line break" 

然後,它應該是這樣的:

[['Arsenal', 2.47, 1.2, 0.89], ['Chelsea', 2.15, 0.8, 1.21]...]

但是,如果我打印出來它顯示爲:

["['Arsenal', 2.47, 1.2, 0.89]", ['Chelsea', 2.15, 0.8, 1.21|]..."]

如果我遍歷它,它似乎顯示爲預期

所以這似乎已經取得了每整個子列表的字符串,而不是列表,對嗎?這有兩個奇怪的敲門聲 - 例如,如果我使用final_stats [0] [2]訪問元素,它會給我一個'A'而不是'Arsenal',這是我期望的。

另一方面,當然是我不能對列表元素運行邏輯操作 - 分塊長列表或阻止這種情況發生的最佳方式是什麼?

如果您需要完整的代碼(這裏不包括簡潔),那麼它是here - 我懷疑這個問題是無意中造成的,在這篇文章中的問題。

有人在這個答案中建議使用字典作爲更好的數據容器 - 我對列表結構感到非常滿意,並且它對我想要做的事情(對我來說是一個新手)感覺更簡單 - 這些數據結構總是統一的大小,所以我不想改變數據類型,除非我真的必須。我認爲這是一個有益的事情,我會長期考慮。

回答

2

repr()獲取字符串的表示形式。即:

print repr("""Hello! 
this is a test string 
yay.""") 

返回:

'Hello!\nthis is a test string\nyay.' 

在你的代碼,它是一個列表轉換成字符串,這就是爲什麼當你[0][2]你得到一個字符,不是你期望的那樣。

有沒有必要在您的代碼中調用它。通常只需附加chuncked列表。

+0

Muh。很簡單。就這樣,兩個問題得到解答。 – Withnail

+0

@ChrisCampbell;) – TerryA

+0

我會在7分鐘內接受! – Withnail