game_record = [['*', 'G02', 'G05', 'G07', 'G08', 'G10'],
['P001', '1', '0', '-1', '503', '1'],
['P067', '1', '1', '0', '-1', '503'],
['P218', '0', '1', '1', '-1', '-1'],
['P101', '0', '0', '1', '1', '503'],
['P456', '1', '1', '-1', '1', '-1']]
game_record 串列資料的資訊:
- * = 沒有,只??是一個符號
- GXX = 游戲 ID
- PXXX = 玩家 ID
- 1 = 玩游戲并獲勝(游戲完成并記錄)
- 0 = 玩游戲并輸(游戲結束并記錄)
- -1 = 不玩游戲(未記錄)
- 503 = 在正在進行的游戲中(游戲未完成且未記錄)
例如:
- G02已由5名玩家完成,共3名玩家獲勝,2名玩家失敗。
- G08 已由 2 名玩家進行并完成,共 2 名玩家獲勝。
因此,記錄中只有“1”和“0”很重要。
我想回圈這個 2D 串列來計算每個游戲 (game_id) 被玩家玩、贏和輸的次數。然后將它們存盤到字典中。
預期輸出:
Game_info = {G02: [5, 3, 2], G05: [5, 3, 2], G07: [3, 2, 1], G08: [2, 2, 0], G10: [1, 1, 0]}
uj5u.com熱心網友回復:
從一個字典開始,所有游戲都game_record初始化為[0,0,0]
Game_info = { game:[0,0,0] for game in game_record[0] if game != "*"}
然后你可以迭代game_record并更新值Game_info
n, m = len(game_record[0]), len(game_record)
for y in range(1,n):
g_id = game_record[0][y]
for x in range(1,m):
res = game_record[x][y]
if res == '1':
Game_info[g_id][0] = 1
Game_info[g_id][1] = 1
elif res == '0':
Game_info[g_id][0] = 1
Game_info[g_id][2] = 1
uj5u.com熱心網友回復:
您可以使用NumPy和布爾陣列來保存回圈:
import numpy as np
game_array = np.array(game_record)
won = game_array[1:, 1:] == '1'
lost = game_array[1:, 1:] == '0'
played = won | lost
game_info = {game: [sum(played[:, i]),
sum(won[:, i]),
sum(lost[:, i])]
for i, game in enumerate(game_array[0, 1:])}
game_info
{'G02': [5, 3, 2],
'G05': [5, 3, 2],
'G07': [3, 2, 1],
'G08': [2, 2, 0],
'G10': [1, 1, 0]}
uj5u.com熱心網友回復:
嘗試這個。
game_record = [
['*', 'G02', 'G05', 'G07', 'G08', 'G10'],
['P001', '1', '0', '-1', '503', '1'],
['P067', '1', '1', '0', '-1', '503'],
['P218', '0', '1', '1', '-1', '-1'],
['P101', '0', '0', '1', '1', '503'],
['P456', '1', '1', '-1', '1', '-1']
]
res = {}
for i in range(1, 6):
w, l = 0, 0
label = game_record[0][i]
for j in range(1, 6):
v = game_record[j][i] # access matrix value (column-wise) except row 0 and col 0
if v == '-1' or v == '503':
continue
if v == '1':
w = 1
else:
l = 1
g = w l
res.update({label: [g, w, l]})
print(res)
# {'G02': [5, 3, 2], 'G05': [5, 3, 2], 'G07': [3, 2, 1], 'G08': [2, 2, 0], 'G10': [1, 1, 0]}
uj5u.com熱心網友回復:
這是我沒有庫的解決方案。
names = game_record[0][1:]
game_record = [*zip(*game_record[1:])][1:] # Transpose and drop
game_record = [list(map(int, x)) for x in game_record] # Turn into int
solution = dict()
for i, game in enumerate(game_record):
game = [x for x in game if x not in [-1, 503]] # Filter unwanted
solution[names[i]] = [len(game), sum(game), len(game) - sum(game)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/339616.html
