选择列表/列/数组

时间:2018-04-26 18:14:27

标签: python

从以下元素列表中如何按索引选择,所以索引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']

3 个答案:

答案 0 :(得分:3)

一种方法是使用itertools.compressitertools.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个元素。