- В вашем списке нет пропускающего
]
.
- Вы не можете поместить цикл внутри списка.
Является ли x.C списком или последовательностью какого-либо рода? Вы намерены записать каждый элемент x.C как отдельное поле в CSV?
Я полагаю, вы намеревались использовать оператор объединения списков +
, который берет два списка и склеивает их вместе в один список. Используйте это так:
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]
Ваш пример становится:
for x in case_log_list:
c_list = [item for item in x.C.all] # turn x.C into a list
output_list = [x.A, x.B] + c_list + [x.D,] # assemble list
writer.writerow( output_list )
Или, если вы хотите быть кратким:
for x in case_log_list:
writer.writerow ( [x.A, x.B] + [item for item in x.C.all] + [x.D,] )
Примечания:
Если x.C.all
уже является списком, то есть, если type(x.C.all) is list
равно True
, то [x.A, x.B] + x.C.all + [x.D,]
будет достаточно.
c_list = [item for item in x.C.all]
- это понимание списка , которое позволяет вам что-то делать со списком без необходимости писать цикл for
.
Понимание списка очень мощное, очень элегантное, и вы должны использовать его везде, где это имеет смысл. В любое время, когда вам нужно составить список на основе другого списка, отфильтровать элементы в списке по некоторым критериям или в одно и то же время, возможно, лучше всего понять список.
Однобуквенные имена переменных, такие как x
, A
, B
, C
, D
, действительно ужасны, потому что они не дают информации о том, какие данные хранит переменная, каков ее тип быть, какие значения он может содержать и т. д. Используйте больше описательных имен переменных, если можете.