2012-07-05 33 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

相关问题