嗨,我想检查是否有任何方法可以在数组上获取子项,例如下面。
Array = [('a',1,'aa'),('b',2,'bb'),('c',3,'cc')]
如果想像这样打印出数组的所有第二个子项[ 1, 2, 3]
或者像这样的第三个子项[ aa , bb, cc]
请帮助我...非常感谢
你可以list-comprehension
像这样使用function
:
def get_elem(arr, n):
return [x[n] for x in arr]
然后调用它:
my_array = [('a', 1, 'aa'), ('b', 2, 'bb'), ('c', 3, 'cc')]
print get_elem(my_array, 1)
输出:
[1, 2, 3]
Python 的核心设计是非常容易地处理这些任务。您不需要循环来合并、提取、拆分、列表。
列表推导非常适合在容器上执行这种操作。
生成器表达式可能更有用,用法取决于上下文。
以下是两者的示例:
array = [('a',1,'aa'), ('b',2,'bb'), ('c',3,'cc')]
sub_2 = [item[2] for item in array] # sub_2 is a classique list, with a length
gen_1 = (item[1] for item in array) # gen_1 is a generator, which gather value on the fly when requested
print(sub_2)
for i in gen_1:
print(i)
输出:
['aa', 'bb', 'cc']
1
2
3
您可以编写一个实用函数来提供帮助,但在简单的情况下,最好直接在需要的地方编写生成器。
这是您可以编写的实用函数的示例:
def sub(container, index):
return (item[index] for item in container)
print([i for i in sub(array, 0)])
输出['a', 'b', 'c']
您可以通过创建一个函数来获取元组(或列表)中的第 n 个项目,然后在循环中调用该函数,如下所示:
my_array = [('a', 1, 'aa'), ('b', 2, 'bb'), ('c', 3, 'cc')]
result_array = []
n = 2 # set your desired index here
def get_nth(some_tuple, index):
result_array.append(some_tuple[index] if len(some_tuple) > index else None)
for sub_item in my_array:
get_nth(sub_item, n)
print result_array
使用邮编:
Array = [ ('a',1,'aa'),('b',2,'bb'),('c',3,'cc') ]
zipped = zip(*Array) #gives your desired form
for item in zipped:
print(item)
输出:
('a', 'b', 'c')
(1, 2, 3)
('aa', 'bb', 'cc')