从以下元素列表中如何按索引选择,所以索引1,2,然后是5,6然后是9,10? 数字和文字无关,订单是相关的。背后的基本思想如下:假设你有特征a,b,c,d,并且对于所有这些你有平均值,标准差,最小值和最大值。如果您只对显示特征b和c感兴趣,如何显示它们?
column=[]
for i in range(1,4):
for j in list('abcd'):
column.append(str(j)+str(i))
column
['a1', 'b1', 'c1', 'd1', 'a2', 'b2', 'c2', 'd2', 'a3', 'b3', 'c3', 'd3']
如何在索引1,2,5,6,9,10中提取值,结果是
['b1', 'c1', 'b2', 'c2', 'b3', 'c3']
答案 0 :(得分:3)
一种方法是使用itertools.compress
和itertools.cycle
。它基本上使用掩码为每个4元素块重复选择索引1和2处的元素。
import itertools as it
print([x for x in it.compress(column, it.cycle([0, 1, 1, 0]))])
# ['b1', 'c1', 'b2', 'c2', 'b3', 'c3']
答案 1 :(得分:0)
您可以使用正则表达式查找以您要识别的功能开头的所有列。
def get_columns(arr, sw):
return re.findall(r'(?:{})\d+'.format('|'.join(sw)), ''.join(arr))
上面的函数包含一系列功能,以及您要匹配的列列表。
行动中:
In [6]: y = ['featureA1', 'featureB1', 'featureC1', 'featureA2', 'featureB2', 'featureC2']
In [7]: def get_columns(arr, sw):
...: return re.findall(r'(?:{})\d+'.format('|'.join(sw)), ''.join(arr))
In [8]: get_columns(y, ['featureA'])
Out[8]: ['featureA1', 'featureA2']
答案 2 :(得分:0)
您可以使用步长为4的范围,然后从该索引开始访问两个列表元素。
result = []
for i in range(1, len(column)-1, 4):
result.append(column[i])
result.append(column[i+1])
警告:这只会返回每个索引对的两个元素都存在的元素。例如。如果没有10,它就不会返回第9个元素。