2016-05-20 3 views
2

Есть ли способ сделать нижеследующее более кратким способом? Если у меня много значений, то в моем случае мой скрипт станет очень нечитаемым.Или состояние в понимании списка

Текущий код

import xlrd 
filename = r'H:\Book1.xls' 
wb = xlrd.open_workbook(filename) 
sh1 = wb.sheet_by_index(0) 
data = [sh1.row_values(row) for row in range(sh1.nrows) if 1 in sh1.row_values(row) or 9 in sh1.row_values(row) ] 
print(data) 

Код Результат

[[1.0, 2.0, 3.0, '', 4.0, '', 6.0], ['', '', '', '', 9.0, '', '']] 

Желаемая Синтаксис

data = [sh1.row_values(row) for row in range(sh1.nrows) if 1,9 in sh1.row_values(row)] 

Кроме того, Wou ld можно ли переходить в список или какой-то объект, содержащий 1, 9 и т. д.?

+3

', если {1, 9} & Set (sh1.row_values ​​(строка))' возможно? –

+5

вы можете использовать 'any':' if any (i в sh1.row_values ​​(строка) для i в (1, 9)) ' – njzk2

+0

спасибо AnthonySottile и njzk2 – PyNoob

ответ

5

Используйте набор:

if {1,9}.intersection(sh1.row_values(row)) 
+0

извините за задержку и спасибо – PyNoob

Смежные вопросы