按数字计算列表中数字重复的次数
Count how many times numbers repeat in list number by numbers
考虑第一个数字,比如 m。查看这个数字连续重复了多少次。如果它连续重复 k 次,它会在输出列表中产生两个条目:第一个
数 k,然后数 m。 (这类似于我们在看到时说“四个 2”
[2,2,2,2].) 然后我们移动到 m 的 运行 之后的下一个数字。重复这个过程
直到列表中的每个数字都被考虑
示例:通过查看几个示例或许可以最好地理解该过程:
• readAloud([]) 应该 return []
• readAloud([1,1,1]) 应该 return [3,1]
• readAloud([-1,2,7]) 应该 return [1,-1,1,2,1,7]
• readAloud([3,3,8,-10,-10,-10]) 应该 return [2,3,1,8,3,-10]
• readAloud([3,3,1,1,3,1,1]) 应该 return [2,3,2,1,1,3,2,1]
我有以下代码:
def readAloud(lst: List[int]) -> List[int]:
answer:List[int]=[]
l=len(lst)
d=1
for i in range(l-1):
if(lst[i]==lst[i]):
d = d + 1
answer.append(d)
answer.append(lst[i])
if (lst[i-1] != lst[i]):
d=1
answer.append(d)
answer.append(lst[i])
return answer
这里有一个解决方案(但这不是唯一的:))
def readAloud(lst):
answer = []
count = 1
prev_elt = lst[0]
for m in lst[1:] + [None]: # we add Node for the last values
if prev_elt == m:
count += 1
else:
answer.extend([count, prev_elt])
prev_elt = m
count = 1
return answer
print(readAloud([3,3,1,1,3,1,1]))
分组相邻元素正是 itertools.groupby 的用途。
from itertools import chain, groupby
def read_aloud(numbers):
r = ((sum(1 for _ in v), k) for k, v in groupby(numbers))
return list(chain.from_iterable(r))
示例:
>>> read_aloud([])
[]
>>> read_aloud([1, 1, 1])
[3, 1]
>>> read_aloud([3, 3, 8, -10, -10, -10])
[2, 3, 1, 8, 3, -10]
>>> read_aloud([3, 3, 1, 1, 3, 1, 1])
[2, 3, 2, 1, 1, 3, 2, 1]
考虑第一个数字,比如 m。查看这个数字连续重复了多少次。如果它连续重复 k 次,它会在输出列表中产生两个条目:第一个 数 k,然后数 m。 (这类似于我们在看到时说“四个 2” [2,2,2,2].) 然后我们移动到 m 的 运行 之后的下一个数字。重复这个过程 直到列表中的每个数字都被考虑
示例:通过查看几个示例或许可以最好地理解该过程:
• readAloud([]) 应该 return []
• readAloud([1,1,1]) 应该 return [3,1] • readAloud([-1,2,7]) 应该 return [1,-1,1,2,1,7]
• readAloud([3,3,8,-10,-10,-10]) 应该 return [2,3,1,8,3,-10]
• readAloud([3,3,1,1,3,1,1]) 应该 return [2,3,2,1,1,3,2,1]
我有以下代码:
def readAloud(lst: List[int]) -> List[int]:
answer:List[int]=[]
l=len(lst)
d=1
for i in range(l-1):
if(lst[i]==lst[i]):
d = d + 1
answer.append(d)
answer.append(lst[i])
if (lst[i-1] != lst[i]):
d=1
answer.append(d)
answer.append(lst[i])
return answer
这里有一个解决方案(但这不是唯一的:))
def readAloud(lst):
answer = []
count = 1
prev_elt = lst[0]
for m in lst[1:] + [None]: # we add Node for the last values
if prev_elt == m:
count += 1
else:
answer.extend([count, prev_elt])
prev_elt = m
count = 1
return answer
print(readAloud([3,3,1,1,3,1,1]))
分组相邻元素正是 itertools.groupby 的用途。
from itertools import chain, groupby
def read_aloud(numbers):
r = ((sum(1 for _ in v), k) for k, v in groupby(numbers))
return list(chain.from_iterable(r))
示例:
>>> read_aloud([])
[]
>>> read_aloud([1, 1, 1])
[3, 1]
>>> read_aloud([3, 3, 8, -10, -10, -10])
[2, 3, 1, 8, 3, -10]
>>> read_aloud([3, 3, 1, 1, 3, 1, 1])
[2, 3, 2, 1, 1, 3, 2, 1]