【问题标题】:Comparing 2 lists of lists (String and array)比较 2 个列表列表(字符串和数组)
【发布时间】:2017-04-02 13:36:35
【问题描述】:

从字符串和数组的两个列表中创建第三个列表时遇到问题:

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:]))

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

【问题讨论】:

    标签: python arrays list compare


    【解决方案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']
    

    【讨论】:

    • 您可以使用itertools.chain 将列表链接在一起,这样您就不必创建新的组合列表:[x for x in chain(d, v) if x[0] == 'H']
    • @PeterWood 酷!但是对于问题中提供的小示例数据集,它似乎稍微慢了一点。
    • 非常感谢,这有效:[x for x in chain(d,v) if x[0][0] == 'H']
    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2019-04-07
    • 1970-01-01
    相关资源
    最近更新 更多