从两个String和数组列表中的相同字符串中生成第三个列表时遇到问题:
d = [('O', array([ 0.034 , -0.31900001, 1.18900001], dtype=float32)),
('H', array([ 0.29499999, 4.56899977, 1.44500005], dtype=float32)),
('O', array([ 0.30500001, 7.00199986, 1.88199997], dtype=float32)),
('H', array([ 0.215 , 11.07900047, 1.52199996], dtype=float32)),
('O', array([ 0.23999999, 13.68999958, 1.99199998], dtype=float32)),
...]
v = [('H', array([ 0.64899999, 1.29700005, 3.33400011], dtype=float32)),
('O', array([-0.131 , 3.41700006, 3.31900001], dtype=float32)),
('H', array([ 0.764 , 7.69399977, 3.61800003], dtype=float32)),
('O', array([ 0.15000001, 10.2130003 , 3.273 ], dtype=float32)),
('H', array([ 1.01499999, 14.08399963, 3.7420001 ], dtype=float32)),
...]
我需要的结果应该包含所有' H'从两个列表和这些H的所有坐标(定期)
result = [('H', array([ 0.29499999, 4.56899977, 1.44500005], dtype=float32)),
('H', array([ 0.64899999, 1.29700005, 3.33400011], dtype=float32)),
('H', array([ 0.215 , 11.07900047, 1.52199996], dtype=float32)),
('H', array([ 0.764 , 7.69399977, 3.61800003], dtype=float32)),
('H', array([ 1.01499999, 14.08399963, 3.7420001 ], dtype=float32)),
...]
尝试了不同的选择,但却陷入了不可靠的类型:' numpy.ndarray'每当我尝试在循环中制作它时:
result=list(set(d[0][1:]) & set(v[0][1:]))
非常感谢您的想法,建议。
答案 0 :(得分:1)
您可以合并列表d和v,然后选择包含' H'
的项目[x for x in d + v if x[0] == 'H']
编辑:
上面的建议将在内存中创建一个包含d和v的新列表。为了提高内存效率,你可以冷使用itertools.chain
:
from itertools import chain
[x for x in chain(d, v) if x[0] == 'H']