Python 从1开始的列表列表中的增量值

Python 从1开始的列表列表中的增量值,python,Python,我有一个列表,例如[[0,0],[4,0],[2,0],[5,3],[0,1] 我想要的输出是[[0,0],[1,0],[2,0],[3,4],[0,5]] 也就是说,我希望修改列表,以便如果值不是零,我将其设置为计数,计数从1开始,每个非零值递增1。如果是0,我将其保留为0 我该怎么办?我开始使用enumerate建立索引,但这比我想象的要难 以下是我所做的:w生成初始列表。这不是我的完整代码,因为它太长,无法发布 w = [[i if i != l else 0 for i in x] fo

我有一个列表,例如
[[0,0],[4,0],[2,0],[5,3],[0,1]

我想要的输出是
[[0,0],[1,0],[2,0],[3,4],[0,5]]

也就是说,我希望修改列表,以便如果值不是零,我将其设置为计数,计数从1开始,每个非零值递增1。如果是0,我将其保留为0

我该怎么办?我开始使用
enumerate
建立索引,但这比我想象的要难

以下是我所做的:
w
生成初始列表。这不是我的完整代码,因为它太长,无法发布

w = [[i if i != l else 0 for i in x] for x in c]
print(w)
inc = 1
lx = []
gg = []
for i in w:
   if i[0] or i[1] !=0:
      g = w.index(i)
      gg.append(g)
      lx.append(i)
for x in gg:
   for i, v in enumerate(w):
       if x==i:
          if
          print(x, i, v)

谢谢

我觉得你把事情复杂化了。如果任一元素为0,则无需触摸它。如果是其他东西,增加计数并将其粘贴在正确的位置

nums = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1]]
count = 0
for i,(a,b) in enumerate(nums):
  if a != 0:
    count += 1
    nums[i][0] = count
  if b != 0:
    count += 1
    nums[i][1] = count

print nums
输出:

[[0, 0], [1, 0], [2, 0], [3, 4], [0, 5]]

我觉得你把事情复杂化了。如果任一元素为0,则无需触摸它。如果是其他东西,增加计数并将其粘贴在正确的位置

nums = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1]]
count = 0
for i,(a,b) in enumerate(nums):
  if a != 0:
    count += 1
    nums[i][0] = count
  if b != 0:
    count += 1
    nums[i][1] = count

print nums
输出:

[[0, 0], [1, 0], [2, 0], [3, 4], [0, 5]]

如果您的子列表是两个元素,则可以去掉enumerate

from itertools import count
counter = count(1)
lst = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1]]
for pair in lst:
    pair[0] = next(counter) if pair[0] else 0
    pair[1] = next(counter) if pair[1] else 0
print(lst)
对于较长或可变的子列表,您可以使用枚举、映射或列表

from itertools import count
counter = count(1)
lst = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1], [0, 1, 3, 3, 3], [3]]
for sublist in lst:
    sublist[:] = map(lambda x: (next(counter) if x else 0), sublist)
    # slice assignment is 'in-place' assignment



from itertools import count
counter = count(1)
lst = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1], [0, 1, 3, 3, 3], [3]]
for sublist in lst:
    for i, element in enumerate(sublist):
        sublist[i] = next(counter) if element else 0 

如果您的子列表是两个元素,则可以去掉enumerate

from itertools import count
counter = count(1)
lst = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1]]
for pair in lst:
    pair[0] = next(counter) if pair[0] else 0
    pair[1] = next(counter) if pair[1] else 0
print(lst)
对于较长或可变的子列表,您可以使用枚举、映射或列表

from itertools import count
counter = count(1)
lst = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1], [0, 1, 3, 3, 3], [3]]
for sublist in lst:
    sublist[:] = map(lambda x: (next(counter) if x else 0), sublist)
    # slice assignment is 'in-place' assignment



from itertools import count
counter = count(1)
lst = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1], [0, 1, 3, 3, 3], [3]]
for sublist in lst:
    for i, element in enumerate(sublist):
        sublist[i] = next(counter) if element else 0 

使用列表理解,这也会起作用,可能更具python风格且更短:

from itertools import count

lst = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1]]
counter = count(1)

lst = [[next(counter) if x != 0 else 0 for x in sublst] for sublst in lst]
# [[0, 0], [1, 0], [2, 0], [3, 4], [0, 5]]
了解更多有关
itertools.count
工作原理的信息,同时这里有一个小片段,以便更好地理解:

>>> import itertools
>>> c = itertools.count(1)
>>> next(c)
1
>>> next(c)
2

使用列表理解,这也会起作用,可能更具python风格且更短:

from itertools import count

lst = [[0, 0], [4, 0], [2, 0], [5, 3], [0, 1]]
counter = count(1)

lst = [[next(counter) if x != 0 else 0 for x in sublst] for sublst in lst]
# [[0, 0], [1, 0], [2, 0], [3, 4], [0, 5]]
了解更多有关
itertools.count
工作原理的信息,同时这里有一个小片段,以便更好地理解:

>>> import itertools
>>> c = itertools.count(1)
>>> next(c)
1
>>> next(c)
2


枚举确实有用。我正在努力学习它是如何工作的。如果你不介意,对你所做的做一点解释会有所帮助。我完全理解@pushkin在大多数情况下所做的枚举是对传统的从到循环的替换。Python在areason中没有它。最好只是在元素上循环,除非您可以求助于enumerate.ok,enumerate很好,只是在代码中是无关的(简称子列表),enumerate确实有帮助。我正在努力学习它是如何工作的。如果你不介意,对你所做的做一点解释会有所帮助。我完全理解@pushkin在大多数情况下所做的枚举是对传统的从到循环的替换。Python在areason中没有它。最好只是循环元素,除非你可以求助于enumerate。好的,enumerate很好,只是在你的代码中是无关的(对于短子列表)我向上投票,但我认为你需要添加赋值,问题是如何更改list@Serge当然我现在已经做了改变。谢谢你的留言!我投了赞成票,但我认为你需要添加作业,问题是如何更改作业list@Serge当然我现在已经做了改变。谢谢你的留言!子列表总是成对的还是需要处理任意列表?听起来很有趣。有必要了解如何扩展到非成对列表的任意列表。“你介意吗?”我来看看我的答案。它也适用于任意列表。@Starter更新了答案,尽管comperhension通常比map更快,map是Python函数式编程的遗迹。Google代码风格建议不要使用嵌套理解。不确定它们在双重映射上的立场是什么,或者它们与理解混在一起。子列表总是成对的还是需要处理任意列表?听起来很有趣。有必要了解如何扩展到非成对列表的任意列表。“你介意吗?”我来看看我的答案。它也适用于任意列表。@Starter更新了答案,尽管comperhension通常比map更快,map是Python函数式编程的遗迹。Google代码风格建议不要使用嵌套理解。不知道他们在双重地图上的立场是什么,或者把他们和理解混为一谈。