Python:没有列表的元组

时间:2011-05-04 09:28:00

标签: python tuples

我正在尝试使用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接口指定,所以没有其他可以使用的格式。

非常感谢

2 个答案:

答案 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)]并完成。