返回基于字符串名称的单元格数组

时间:2018-04-08 09:44:44

标签: python arrays string

A=[['Upper_lower_torque/SPH-Lower torque-Upper torque.1', 'DynGraphElement', {'fx1': 239761.59375, 'fy1': -121644.0, 'fz1': -299702.0, 'tx1': 0.0, 'ty1': 0.0, 'tz1': 0.0, 'fmg1': 402621.62557113107, 'tmg1': 0.0}], ['Upper_lower_torque/REV--Lower torque.1', 'DynGraphElement', {'fx1': 239761.59375, 'fy1': -121644.0, 'fz1': -299702.0, 'tx1': 30411.0, 'ty1': -0.0, 'tz1': 24328.80078125, 'fmg1': 402621.62557113107, 'tmg1': 38945.08272495708}]

在分析中,我有例如力量& 2个关节的矩,是球形(SPH)和旋转(REV)。它们通过['关节名称','元素类型',{六个力和力矩}]存储在每个单元格中。假设我想返回SPH-joint(第一个单元格),所以['Upper_lower_torque / SPH ..,'DynGraph ..',{'fx1':2391 ...}]通过搜索它来退出数组它的具体名称,因此包含关键字SPH和Lower或Upper。

我知道您可以通过

进行搜索
if any("SPH" in s for s in A ):

但是我无法使它工作,因为我最好想要更多的关键字,所以SPH和Lower或Upper例如,如果它们在一个单元格中,我想要返回单元格(或单元格索引),所以最终< / p>

['Upper_lower_torque/SPH.., 'DynGraph..',{'fx1':2391...}]

有谁知道如何才能做到这一点非常有效?

提前致谢

1 个答案:

答案 0 :(得分:0)

您需要提供一个函数来进行布尔比较,因此您可以将所有内容打包在一起:

def get_cell_element(data, comp, index=0):
    for element in data:  # for i, element in enumerate(elements) if you need the index
        if comp(element[index]):
            return element

然后,您可以通过提供比较功能(甚至可以搜索不同的索引)轻松搜索列表,例如:

A = [
    ['Upper_lower_torque/SPH-Lower torque-Upper torque.1',
     'DynGraphElement',
     {'fx1': 239761.59375, 'fy1': -121644.0, 'fz1': -299702.0,
      'tx1': 0.0, 'ty1': 0.0, 'tz1': 0.0, 'fmg1': 402621.62557113107, 'tmg1': 0.0}
     ],
    ['Upper_lower_torque/REV--Lower torque.1',
     'DynGraphElement',
     {'fx1': 239761.59375, 'fy1': -121644.0, 'fz1': -299702.0,
      'tx1': 30411.0, 'ty1': -0.0, 'tz1': 24328.80078125, 'fmg1': 402621.62557113107,
      'tmg1': 38945.08272495708}
     ]
]

element = get_cell_element(A, lambda x: "SPH" in x and ("Lower" in x or "Upper" in x))
# ['Upper_lower_torque/SPH-Lower torque-Upper torque.1', 'DynGraphElement',
#  {'ty1': 0.0, 'fx1': 239761.59375, 'tmg1': 0.0, 'fz1': -299702.0,
#   'tz1': 0.0, 'fy1': -121644.0, 'tx1': 0.0, 'fmg1': 402621.62557113107}]

element = get_cell_element(A, lambda x: "Lower" in x and "REV" in x)
# ['Upper_lower_torque/REV--Lower torque.1', 'DynGraphElement',
#  {'fx1': 239761.59375, 'fz1': -299702.0, 'tz1': 24328.80078125, 'fmg1': 402621.62557113107,
#   'tmg1': 38945.08272495708, 'ty1': -0.0, 'fy1': -121644.0, 'tx1': 30411.0}]
# etc.