2011-05-04 22 views
3

我試圖使用Abaqus(商業FEA代碼)腳本接口來生成有限元模型,雖然我的問題是專門針對Python,但是爲什麼我試圖去爲此Python:列出元組沒有「

的Abaqus有一個內置的布爾合併操作,需要下面的語法中使用:

a.InstanceFromBooleanMerge(name='name_string', instances=(
    a.instances['string1'], a.instances['string2'], 
    a.instances['string3'],), originalInstances=SUPPRESS, 
    domain=GEOMETRY) 

在「實例」參數被指定爲一個元組,其中每個元素的格式爲

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接口指定的,所以可以使用沒有替代的格式。

非常感謝

回答

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

這些字符將被打印出來,只是因爲你打印出數組 - 這意味着字符串將被引用,因此您可以看到(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)]作爲參數並完成。