我正在尝试使用Abaqus (一个商业有限元分析代码)脚本接口来生成有限元模型,虽然我的问题是与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接口指定的,所以没有可供选择的格式。
非常感谢
发布于 2011-05-04 17:30:56
你已经很接近了,试试:
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))发布于 2011-05-04 17:33:41
这些字符将被打印出来,因为您打印的是一个元组-这意味着字符串将被引用,因此您可以看到(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)],然后就完成了。
https://stackoverflow.com/questions/5881309
复制相似问题