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代码风格建议不要使用嵌套理解。不知道他们在双重地图上的立场是什么,或者把他们和理解混为一谈。