比较2个列表(字符串和数组)

时间:2017-04-02 13:36:35

标签: python arrays list compare

从两个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:]))

非常感谢您的想法,建议。

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']