Python:将列表转换为元组而不带
我正在尝试使用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接口规定的,所以不能用其他格式。
非常感谢!
2 个回答
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))
。
补充2:其实你可以检查一下你正在使用的库。除非它特别要求使用元组,否则它也能接受列表,因为这两者的接口基本上是一样的。如果是这样,你可以直接把 [a.instances['name_' + str(i)] for i in range(n)]
作为参数传进去,就可以了。
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))