我正在尝试使用Abaqus(商业FEA代码)脚本界面来生成有限元模型,虽然我的问题与Python有关,但有一些背景知道我为什么要这样做。
Abaqus有一个内置的布尔合并操作,需要使用以下语法:
a.InstanceFromBooleanMerge(name='name_string', instances=(
a.instances['string1'], a.instances['string2'],
a.instances['string3'], ), originalInstances=SUPPRESS,
domain=GEOMETRY)
'instances'参数被指定为元组,其中每个元素的格式为
a.instances['string1']
我试图让它成为这个元组中元素的数量,显然其中的名称是可编写脚本的。目前我的代码如下:
my_list = []
for i in range(4):
name = str('a.instances[\'')+str('name_')+str(i)+str('\']')
my_list.append(name)
my_list = tuple(my_list)
print my_list
然而,这给出了:
("a.instances['name_0']", "a.instances['name_1']", "a.instances['name_2']",
a.instances['name_3']")
我已经尝试使用lstrip和rstrip删除“字符但无效。是否有一种方法可以生成任意长度的元组,其中元素没有用引号括起来?格式由Abaqus接口指定,所以没有其他可以使用的格式。
非常感谢
答案 0 :(得分:3)
你很近,试试:
for i in range(4):
val = a.instances["name_"+str(i)]
my_list.append(val)
使用生成器表达式可以缩短它:
my_list = tuple(a.instances["name_"+str(i)] for i in range(4))
答案 1 :(得分:1)
这些字符只会因为您打印出一个元组而被打印出来 - 这意味着会引用字符串,因此您可以看到(123,)
和("123",)
之间的差异。如果你想没有引号,请自己构建输出:
def make_tuple_of(n):
return '(' + ', '.join("a.instances['name_" + str(i) + "']" for i in range(n)) + ')'
编辑:我认为你实际上想要生成代码本身,而不是在当前代码中创建元组。如果在当前代码中生成元组是您真正想要的,只需使用tuple(a.instances['name_' + str(i)] for i in range(n))
Edit2:实际上,您可以查看您正在使用的库。除非它出于某种原因专门测试元组,否则接受列表就好了,因为两者的接口几乎相同。如果是,您可以将其作为参数传递[a.instances['name_' + str(i)] for i in range(n)]
并完成。