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

3 回答 3

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 都指向当前项目,因此适用lstrip()于 x 而不是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")
于 2012-07-05T21:23:15.710 回答
1

在 python 文档中查看列表推导的美妙之处。

一个解决方案是

删除项目:

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

或删除前导 '0'

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

更新了答案,因为我无法发表评论。

于 2012-07-05T21:24:51.390 回答
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

另一个是您需要的 gen 表达式:

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

甚至:

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

两种方式都打印您想要的输出。

于 2012-07-05T21:39:22.730 回答