2010-07-15 73 views
2

我需要將3個項目放入列表中。Python中的列表形成

  1. state..eg(1,2)
  2. 行動...... eg..west
  3. 成本.... 5

list=[(state,action,cost), (state,action,cost).........]

我怎樣才能讓它以列表的形式出現。對於一個特定的國家,行動和成本就在那裏。此外,如果我只需要列表中的狀態,我應該能夠從列表中提取它。

+2

究竟什麼是你的問題? – 2010-07-15 06:02:50

回答

1

我不確定我是否理解你的問題的第一部分(「列表形式」)。您可以構建形式你說的元組的列表:

mylist = [(1, 'west', 5), (1, 'east', 3), (2, 'west', 6)] 
# add another tuple 
mylist.append((2, 'east', 7)) 

只提取狀態或行爲(即在每個元組的第一或第二項),你可以使用列表理解:

states = [item[0] for item in mylist] 
actions = [item[1] for item in mylist] 
0

您在上面列出的代碼是元組列表 - 這與您要求的元組非常相似。

從上面的例子中,list [0] [0]返回第一個元組的狀態,list [0] [1] action和list [0] [2]成本。

你可以用類似(狀態,動作,成本)= list [i]來提取值。

3

你的措辭很模糊。現在你有一個元組列表(可怕的名爲list,它從該範圍的其餘部分盜取內置名稱的使用 - 不要重用內置名稱作爲你自己的標識符.. 。如果你不能想到更有意義和有用的名字,請致電alistmylist!)。如果你想列出的清單,代碼:

alist = [[state, action, cost], [state, action, cost], ...] 

如果你想變換一個列表的列表元組的列表,

alist = [list(t) for t in alist] 

(見爲什麼你應該從未篡內置標識符,如list?! - )。

如果要扁平化,列表中,列表(或-of元組)到一個列表

aflatlist = [x for t in alist for x in t] 

要訪問例如「只是國家」(第一項),說在列表中的第N個項目,

justthestate = alist[N][0] 

,或者,如果你已經壓扁了,

justhestate = aflatlist[N*3 + 0] 

(該+ 0顯然是多餘的,但它在那裏告訴你怎麼做的成本,這將是在+ 1等)。

如果你想與所有國家的列表,

allstates = [t[0] for t in alist] 

allstates = aflatlist[0::3] 

我敢肯定,你可能意味着一些東西從這個打你的奧術的話可能的解釋甚至是不同的,但我現在已經喝完了;-)。

+0

ur genius ..謝謝...你也可以幫助我在我之前發佈的其他問題.... http://stackoverflow.com/questions/3252217/help-in-executing-the-code – Shilpa 2010-07-15 06:06:08

+1

@Shilpa ,基本的SO禮儀要點#1:你應該接受最能幫助你的答案(點擊旁邊的複選標記形狀的圖標) - 第二點,只有當你達到15的聲望時才進場,你也應該_upvote_答案是好的(你可以只接受一個答案,但是可以隨心所欲地提供多達你喜歡的答案,毫無疑問,包括你接受的那個答案)。你會發現,除非你這樣做,否則人們不會選擇花費那麼多時間和精力來回答你的問題。 – 2010-07-16 04:36:52

0

試試這個

l = [('a',1,2),('b',3,4),('a',4,6), ('a',6,8)] 

state = [sl[0] for sl in l] 
or for more, 
state = [sl[0] for sl in l if 'a' in sl]