首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:不带“”的元组列表

Python:不带“”的元组列表
EN

Stack Overflow用户
提问于 2011-05-04 17:28:00
回答 2查看 8K关注 0票数 3

我正在尝试使用Abaqus (一个商业有限元分析代码)脚本接口来生成有限元模型,虽然我的问题是与Python相关的,但我想了解一下我为什么要这样做。

Abaqus有一个内置的布尔合并操作,需要使用以下语法:

代码语言:javascript
复制
a.InstanceFromBooleanMerge(name='name_string', instances=(
    a.instances['string1'], a.instances['string2'], 
    a.instances['string3'], ), originalInstances=SUPPRESS, 
    domain=GEOMETRY)

'instances‘参数被指定为一个元组,其中每个元素的格式为

代码语言:javascript
复制
a.instances['string1']

我正在努力使这个元组中的元素数量,显然,其中的名称是可脚本化的。目前我有如下代码:

代码语言:javascript
复制
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

但是,这提供了:

代码语言:javascript
复制
("a.instances['name_0']", "a.instances['name_1']", "a.instances['name_2']",   
    a.instances['name_3']")

我尝试过使用lstrip和rstrip来删除“字符,但没有用。有没有办法生成一个任意长度的元组,其中的元素不是用反逗号括起来的?格式是由Abaqus接口指定的,所以没有可供选择的格式。

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-04 17:30:56

你已经很接近了,试试:

代码语言:javascript
复制
for i in range(4):
    val = a.instances["name_"+str(i)]
    my_list.append(val)

您可以使用生成器表达式使其更简短:

代码语言:javascript
复制
my_list = tuple(a.instances["name_"+str(i)] for i in range(4))
票数 3
EN

Stack Overflow用户

发布于 2011-05-04 17:33:41

这些字符将被打印出来,因为您打印的是一个元组-这意味着字符串将被引用,因此您可以看到(123,)("123",)之间的区别。如果您希望它不带引号,请自己构造输出:

代码语言:javascript
复制
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)],然后就完成了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5881309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档