запись кортежей внутри списка вместо другого lst

#python #string #list

#python #строка #Список

Вопрос:

Я запускаю приведенный ниже код, и он работает только со списком внутри списка. Я хочу, чтобы моим результатом были кортежи внутри списка, как во внутренних скобках. Я попытался написать круглые скобки вместо [], но я получаю синтаксическую ошибку.

 import xlrd

loc= (r"C:UsersUSERDocumentsMATLAB/results.xlsx")

book = xlrd.open_workbook(loc)

trans_agg= [[sheet.cell_value(r, c) for c in range (1,4)]for r in range(1,sheet.nrows)];

print (trans_agg)
  

что я получаю в результате;

 [[-38.9681738617398, 35.220378959142636, 5.072061633983768], [0.3058390201478544, -32.91896886230741, 5.0755459371576075], [0.16656016242917882, 37.047877143990405, 5.08026752912042]]
  

чего я на самом деле хочу;

 [(-38.9681738617398, 35.220378959142636, 5.072061633983768), (0.3058390201478544, -32.91896886230741, 5.0755459371576075), (0.16656016242917882, 37.047877143990405, 5.08026752912042)]
  

Ответ №1:

Вы должны заменить в вашем понимании списка квадратные скобки для вызова функции tuple

 trans_agg= [tuple(sheet.cell_value(r, c) for c in range (1,4))
            for r in range(1, sheet.nrows)]
  

Комментарии:

1. это то, что я получаю, когда я пишу это таким образом; [<объект генератора <genexpr> в 0x000000000363E8B8>, <объект генератора <genexpr> в 0x000000000366A708>]

2. В Python нет понимания кортежей; вам нужно явно вызвать tuple(sheet.cell_value(r, c) for c in range(1,4)) .