首页 / PYTHON / Python中的嵌套列表理解
Python中的嵌套列表理解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中的嵌套列表理解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3022字,纯文字阅读大概需要5分钟。
内容图文
![Python中的嵌套列表理解](/upload/InfoBanner/zyjiaocheng/805/ba22d6eedcc645fbb764277bc3df43a8.jpg)
我有一个列表理解我正试图让我的头脑,我似乎无法得到我想要的东西,并认为我会看到其他人是否知道如何!
我的基本数据结构如下:
structure = [[np.array([[1,2,3],[4,5,6]]), np.array([[7,8,9],[10,11,12]])], [np.array([[13,14,15],[16,17,18]]), np.array([[19,20,21],[22,23,24]])]]
所以我有一个包含numpy数组子列表的整体列表,我想要的输出是某种分组(不管它是列表还是数组),并且配对了以下元素:
[1, 13]
[4, 16]
[2, 14]
[5, 17]
[3, 15]
[6, 18]
我以为我会用以下样式构造得到它:
输出= [结构[i] [0] [j]对于j在范围(9)中对于i在范围内(len(结构))]但是,没有快乐.
我不介意它是否需要不止一个阶段 – 只是想将这些元素组合在一起!
(作为一些背景 – 我有各种模型输出的概率列表,在这些模型中我有一个训练列表和一个验证列表:
[[model_1], [model_2], ..., [model_n]]
其中[model_1]是[[training_set],[validation_set],[test_set]]
和[training_set]是np.array([p_1,p_2,…,p_n],[p_1,p_2,…,p_n],…])
我想将每个模型的项目1的预测组合在一起,并创建一个长度等于我得到的模型数量的训练向量.然后我想做同样的事情,但是对于[training_set]的第二行.
如果这没有意义,请告诉我!
解决方法:
不确定你想要的完整输出,但这可能会有所帮助:
imort numpy as np
structure = [[np.array([[1, 2, 3], [4, 5, 6]]), np.array([[7, 8, 9], [10, 11, 12]])],
[np.array([[13, 14, 15], [16, 17, 18]]), np.array([[19, 20, 21], [22, 23, 24]])]]
from itertools import chain
zipped = (zip(*ele) for ele in zip(*next(zip(*structure))))
print (list(chain.from_iterable(zip(*zipped))))
[(1, 13), (4, 16), (2, 14), (5, 17), (3, 15), (6, 18)]
好了巫术的崩溃:
# transpose sub arrays so column 0 is the first two sub elements from
# each sub array
In [4]: start = zip(*structure)
In [5]: start
Out[5]:
[(array([[1, 2, 3],
[4, 5, 6]]), array([[13, 14, 15],
[16, 17, 18]])), (array([[ 7, 8, 9],
[10, 11, 12]]), array([[19, 20, 21],
[22, 23, 24]]))]
# our interesting sub array's i.e colunm[0]
In [6]: first_col = next(start)
In [7]: first_col
Out[7]:
(array([[1, 2, 3],
[4, 5, 6]]), array([[13, 14, 15],
[16, 17, 18]]))
# pair up corresponding sub array's
In [8]: intersting_pairs = zip(*first_col)
In [9]: intersting_pairs
Out[9]:
[(array([1, 2, 3]), array([13, 14, 15])),
(array([4, 5, 6]), array([16, 17, 18]))]
# pair them up (1, 13), (2, 14) ...
In [10]: create_final_pairings = [zip(*ele) for ele in intersting_pairs]
In [11]: create_final_pairings
Out[11]: [[(1, 13), (2, 14), (3, 15)], [(4, 16), (5, 17), (6, 18)]]
最后将all链接到一个单独的平面列表中并获得正确的顺序:
In [13]: from itertools import chain
# create flat list
In [14]: flat_list = list(chain.from_iterable(zip(*create_final_pairings))
In [15]: flat_list
Out[15]: [(1, 13), (4, 16), (2, 14), (5, 17), (3, 15), (6, 18)]
使用zip转置的简单示例可能会有所帮助:
In [17]: l = [[1,2,3],[4,5,6]]
In [18]: zip(*l)
Out[18]: [(1, 4), (2, 5), (3, 6)]
In [19]: zip(*l)[0]
Out[19]: (1, 4)
In [20]: zip(*l)[1]
Out[20]: (2, 5)
In [21]: zip(*l)[2]
Out[21]: (3, 6)
对于python2,您可以使用itertools.izip:
from itertools import chain, izip
zipped = (izip(*ele) for ele in izip(*next(izip(*structure))))
print (list(chain.from_iterable(izip(*zipped))))
[(1, 13), (4, 16), (2, 14), (5, 17), (3, 15), (6, 18)]
内容总结
以上是互联网集市为您收集整理的Python中的嵌套列表理解全部内容,希望文章能够帮你解决Python中的嵌套列表理解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。