2
有一个问题,从字符串的两个列表和阵列使第三列表出来的相同字符串:比较表2所列出(字符串和数组)
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)),
...]
是想不同的选择,但要坚持unhashable类型的所有坐标:‘numpy.ndarray’每当我试图使它在一个循环:
result=list(set(d[0][1:]) & set(v[0][1:]))
非常感谢您的意见和建议。
你可以连续使用清单[**'itertools.chain' **](https://docs.python.org/2/library /itertools.html#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'] –