我有一個函數,它採用'1,3-5,7,19'等格式的字符串,並將輸出列表[1, 3, 4, 5, 7, 19]
。使用if/else的嵌套列表理解
但是,我在想這也許足夠簡單,可以用嵌套的列表理解。
我原來的功能是:
result = []
for x in row_range.split(','):
if '-' in x:
for y in range(int(x.split('-')[0]), int(x.split('-')[1]) + 1)):
result.append(y)
else:
result.append(int(x))
我認爲理解是這樣的:
result = [y for x in row_range.split(',') if '-' in x else int(x) for y in range(int(x.split('-')[0]), int(x.split('-')[1] + 1)]
甚至
result = [y for x in row_range.split(',') if '-' in x for y in range(int(x.split('-')[0]), int(x.split('-')[1] + 1) else int(x)]
但這些都是SyntaxError錯誤。將if/else移到理解的前面
result = [y if '-' in x else int(x) for x in row_range.split(',') for y in range(int(x.split('-')[0]), int(x.split('-')[1]) + 1)]
導致IndexError:列表索引超出範圍。
這可能嗎?我已經有一個很好地處理它的函數,並且更具可讀性,但是我只是好奇這是否可以在python中完成。
只是爲了好玩,我決定[在Haskell實現這個(HTTPS://gist.github。 com/NotTheEconomist/e47de2ee01ae3fcde1926d9df705a079)(使用'split'和'text'包) –