如何遍历每个列表项的列表评估第一个字符

时间:2012-07-05 21:20:26

标签: python list

问题:  如何遍历列表,查看每个列表项中的第一个字符。如果第一个字符= "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]来选择第一个list / char项目,但又需要让它循环遍历列表。

编辑:使用生成器:

到目前为止

代码:

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"]

3 个答案:

答案 0 :(得分: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()

上应用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 :(得分:1)

查看python docs上列表推导的美妙。

解决方案是

删除项目:

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

或删除前导'0'

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

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

答案 2 :(得分: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:
    ...

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