2012-07-05 30 views
3

問題: 如何遍歷列表,查看每個列表項中的第一個字符。如果第一個字符= "0"然後刪除「0」,然後查看列表中的下一個項目進行相同的評估。否則:保持原樣。如何循環瀏覽列表中的每個條目的第一個字符

代碼迄今:

gList = ["094G.016", "094G.019", "094G.005", "194G.015"] 

for x in gList: 
    lGrid[i].lstrip("0") 
    print gList 
else: 
    pass 

所需的輸出:

gList = ["94G.016", "94G.019", "94G.005", "194G.015"] 

研究:

我可以使用gList.lstrip("0")從在第一項中刪除零名單,但不知道如何讓它移動到下一個條目並重復該過程。

或者: 我知道我可以使用gList[0][0]來選擇第一個列表/字符項目,但再次需要它的方式來遍歷列表。

編輯:使用發電機:

代碼迄今:

def rem0(data): 
    (x.lstrip('0') for x in lGrid) 
    yield x 

for i in rem0(lGrid): 
    print i 

所需的輸出:

gList = ["94G.016", "94G.019", "94G.005", "194G.015"] 

回答

4
>>> gList = ["094G.016", "094G.019", "094G.005", "194G.015"] 
>>> [x.lstrip('0') for x in gList] 
['94G.016', '94G.019', '94G.005', '194G.015'] 

提高你的方法: 與每個迭代X指向當前的項目,因此在使用項目上X適用lstrip()不是gList

:使用索引

for x in gList: 
    x.lstrip("0") 

for index in xrange(len(gList)): #xrange() or(range() in python 3.x) returns a iterable which contains values from 0 to len(gList)-1 
    gList[index].lstrip("0") 
1

查看python文檔列表推導的美妙之處。

一個解決辦法是

拆除項目:

[item for item in gList if item[0] != '0'] 

或除去最主要的 '0'

[item.lstrip('0') for item in gList] 

更新的答案,因爲我不能發表評論。

+2

我正要發佈這個,但我想他實際上是想刪除字符,而不是整個元素(按照Ashwini的回答)。 – 2012-07-05 21:25:50

+0

現在我可以發表評論了嗎?有些奇怪。那麼他在他的問題上並不十分精確...... – 2012-07-05 21:29:31

+0

您的編輯只是爲您添加了@Ashwini的解決方案....順便說一句,我也像你一樣誤讀了這個問題: -/ – Levon 2012-07-05 21:29:46

1

要修復代碼:

gList = ["094G.016", "094G.019", "094G.005", "194G.015"] 

outL=[] 
for x in gList: 
    outL.append(x.lstrip("0")) 

print outL 
# prints ['94G.016', '94G.019', '94G.005', '194G.015'] 

正如其他人所說,這是一個列表理解簡單:

>>> [x.lstrip('0') for x in gList] 
['94G.016', '94G.019', '94G.005', '194G.015'] 

或者更好的是,發電機:

>>> (x.lstrip('0') for x in gList) 
<generator object <genexpr> at 0x10c27c140> 
>>> list(_) 
['94G.016', '94G.019', '94G.005', '194G.015'] 

編輯

您可以輕鬆地通過兩種方式執行發電機。

首先是編寫一個函數:

def rem0(data): 
    for x in data: 
     yield x.lstrip('0') 

for i in rem0(gList): 
    print i 

另一種是根表達權在你需要它:

for i in (x.lstrip('0') for x in gList): 
    print i 

甚至:

g=(x.lstrip('0') for x in gList) 
for i in g: 
    ... 

兩種方式打印你想要的輸出。

+0

我不確定列表(_)在做什麼?我如何在函數中編寫生成器?看我的編輯爲我想要做的。 – 2012-07-05 22:17:47

+0

@ user765015:'list(_)'顯示了生成器表達式的內容。否則,你會得到'<發生器對象 0x10c27c140>' – dawg 2012-07-05 22:37:03

+0

!非常感謝 !!!!! – 2012-07-05 23:43:01

相關問題