对于python和列表理解还有些新东西,我似乎无法通过某种原因找到太多关于在线的内容。
目前正在尝试从包含多组值的列表中创建中位数平均值列表。
我确实有更长的功能,但希望使用列表理解更简单
# part of an object containing self._rawdata
def get_medians(self):
medianlist = [sets[len(sets)//2-1] for sets in self._rawdata if not len(sets)%2 \
else (sets[len(sets)//2 - 2] + sets[len(sets)//2 -1])/2 for sets in self._rawdata]
return medianlist
我收到无效语法错误,并突出显示' else',使用正确的语法是什么?
答案 0 :(得分:1)
你把条件放在错误的地方。
首先尝试将循环作为常规循环,我想你想要这样做:
for sets in self._rawdata:
if not len(sets)%2:
sets[len(sets)//2-1]
else:
(sets[len(sets)//2 - 2] + sets[len(sets)//2 -1]) / 2
其中两个sets
表达式是您要添加到结果列表中的值。
可以使用条件表达式折叠if ... else ...
语句,允许您将整个事物放入列表解析中:
[sets[len(sets)//2-1] if not len(sets)%2 else (sets[len(sets)//2 - 2] + sets[len(sets)//2 -1]) / 2
for sets in self._rawdata]
因此,对于循环中的每个sets
,您可以根据not len(sets)%2
测试生成两个表达式中的一个。
如果您将中位数委托给函数,可能会更容易:
def median(sets):
if not len(sets) % 2:
return sets[len(sets)//2-1]
return (sets[len(sets)//2 - 2] + sets[len(sets)//2 -1]) / 2
并在列表理解中使用它:
[median(sets) for sets in self._rawdata]
更具可读性。