我有一些需要过滤的结构.有没有办法在Python中很好地完成这项工作?
我有一个丑陋的方式,但我想清理它:
original_header = ['a','b','c']
original_rows = [[1,0,1], [0,0,0], [1,0,0]]
processed_header, processed_rows = some_cool_utility(original_header, original_rows)
assert_equals(['a', 'c'], processed_header)
assert_equals([[1,1], [0,0], [1,0]], processed_rows)
Run Code Online (Sandbox Code Playgroud)
original_header = ['a','b','c']
original_rows = [[1,0,1], [0,0,0], [1,0,0]]
#transpose rows to get columns
columns = zip(*original_rows)
#build list which is true if the column should be kept (is not a column of all zeros)
not_all_zero = [ any(x) for x in columns ]
#filter the lists based on columns
processed_header = [x for i,x in enumerate(original_header) if not_all_zero[i] ]
processed_columns = [ x for i,x in enumerate(columns) if not_all_zero[i] ]
#transpose the remaining columns back into rows.
processed_rows = zip(*processed_columns)
print (processed_header) #['a', 'c']
print (processed_rows) #[(1, 1), (0, 0), (1, 0)]
Run Code Online (Sandbox Code Playgroud)
请注意,这将返回元组列表而不是列表列表.如果你真的需要一个列表列表,你可以processed_rows = map(list, processed_rows)
使用NumPy
import numpy as np
original_rows = np.asarray([[1,0,1], [0,0,0], [1,0,0]])
original_labels = np.asarray(["a", "b", "c"])
# Get locations where columns are all zeros.
nonzero_cols = np.any(original_rows!=0, axis=0)
# Get data only where column is not all zeros.
nonzero_data = original_rows[:, nonzero_cols]
nonzero_labels = original_labels[nonzero_cols]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
204 次 |
最近记录: |