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...}]
有谁知道如何才能做到这一点非常有效?
提前致谢
答案 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.