我们假设我有这个简单的数组:
simple_list = [
('1', 'a', 'aa'),
('2', 'b', 'bb'),
('3', 'c', 'cc')
]
Run Code Online (Sandbox Code Playgroud)
如果我们将此列表视为一个表,其中列由逗号和由元组分隔的行分隔,我想创建一个只检索我想要的列的函数.例如,这个函数看起来像这样:
get_columns(array, tuple_columns_selector))
Run Code Online (Sandbox Code Playgroud)
例如,我希望只收集第一列和第三列,在这种情况下,它会返回另一个带有新值的数组:
如果我做:
get_columns(simple_list, (0,2))
get_columns(simple_list, (0,))
Run Code Online (Sandbox Code Playgroud)
它将返回如下内容:
[('1', 'aa'), ('2', 'bb'), ('1', 'cc')]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
等等.你能帮我创建这个get_columns函数吗?这是我尝试过的代码:
def get_columns(arr, columns):
result_list = []
for ii in arr:
for i in columns:
result_list.append(ii[i])
return result_list
to_do_list = [
('Wake Up', True),
('Brush Teeh', True),
('Go to work', True),
('Take a shower', True),
('Go to bed', False)
]
print(get_columns(to_do_list, (0,)))
Run Code Online (Sandbox Code Playgroud)
使用operator.itemgetter和的魔力
map
:
from operator import itemgetter
simple_list = [
('1', 'a', 'aa'),
('2', 'b', 'bb'),
('3', 'c', 'cc')
]
cols = (1,) # can be (0, 2)
fn = itemgetter(*cols)
print map(fn, simple_list)
Run Code Online (Sandbox Code Playgroud)
返回:
[('1', 'aa'), ('2', 'bb'), ('3', 'cc')]
Run Code Online (Sandbox Code Playgroud)
cols
什么时候(0, 2)
。
它返回:
[1,2,3]
Run Code Online (Sandbox Code Playgroud)
cols
什么时候(1,)
。
所以你的 get_columns 函数可以是
def get_columns(data, cols):
return map(itemgetter(*cols), data)
Run Code Online (Sandbox Code Playgroud)