Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 下一个整数为相同值时的总和整数列表_Python_Sum_Integer - Fatal编程技术网

Python 下一个整数为相同值时的总和整数列表

Python 下一个整数为相同值时的总和整数列表,python,sum,integer,Python,Sum,Integer,所以我需要一个代码来检查一个整数,并检查它后面的整数是否是相同的值。如果是,它将把值添加到x input1 = [int(i) for i in str(1234441122)] x= 0 因此,我的代码目前给出了结果[1,2,3,4,4,4,1,1,2,2]。我希望它给出x=0+4+4+1+2的结果。 我不知道怎么做。你可以试试这个: s = str(1234441122) new_data = [int(a) for i, a in enumerate(s) if i+1 < len

所以我需要一个代码来检查一个整数,并检查它后面的整数是否是相同的值。如果是,它将把值添加到
x

input1 = [int(i) for i in str(1234441122)]
x= 0
因此,我的代码目前给出了结果
[1,2,3,4,4,4,1,1,2,2]
。我希望它给出
x=0+4+4+1+2
的结果。 我不知道怎么做。

你可以试试这个:

s = str(1234441122)
new_data = [int(a) for i, a in enumerate(s) if i+1 < len(s) and a == s[i+1]]
print(new_data)
final_data = sum(new_data)

以下内容将起作用。将相邻的对压缩在一起,仅当第一个元素与第二个元素相同时,才使用第一个元素:

>>> lst = [1, 2, 3, 4, 4, 4, 1, 1, 2, 2]
>>> sum(x for x, y in zip(lst, lst[1:]) if x == y)
11
虽然从理论上讲,这种方法的[space-]效率要低一些(因为切片会创建一个额外的列表),但它在时间和空间上仍然具有
O(N)
复杂性,并且比大多数基于索引访问的解决方案更具可读性。在保持简洁和避免任何导入的同时避免切片的一个棘手方法是:

>>> sum((lst[i] == lst[i-1]) * lst[i] for i in range(1, len(lst)))  # Py2: xrange
11
这利用了这样一个事实,即
lst[i]==lst[i-1]
将被适当地转换为
0
1

也尝试一下这个:

input1 = [int(i) for i in str(1234441122)]
x= 0
res = [input1[i] for i in range(len(input1)-1) if input1[i+1]==input1[i]]
print(res)
print(sum(res))
输出:

[4, 4, 1, 2]
11
[4, 4, 1, 2]
11

您只需在字符串上迭代并将字符转换为整数。您需要迭代并与下一个字符进行比较

a = str(1234441122)
sum = 0
for i,j in enumerate(a[:-1]):
    if a[i] == a[i+1]:
        sum+=int(a[i])
print(sum)
输出

11

这里是@schwobasegll的答案的一个稍微节省空间的版本

>>> lst = [1, 2, 3, 4, 4, 4, 1, 1, 2, 2]
>>> it = iter(lst)
>>> next(it) # throw away first value
>>> sum(x for x,y in zip(lst, it) if x == y)
11
同样,使用
itertools
模块中的
islice
是等效的,但看起来更好一些

>>> from itertools import islice
>>> sum(x for x,y in zip(lst, islice(lst, 1, None, 1)) if x == y)
11

使用
itertools.groupby的另一种方法

l = [1, 2, 3, 4, 4, 4, 1, 1 ,2 ,2]
from itertools import groupby
sum(sum(g)-k for k,g in groupby(l))
#11

不需要那个列表。您可以从字符串中删除“非重复”数字:


到目前为止,您尝试了什么?我尝试使用print(1(input1))来查看是否会显示第一个整数,但没有成功。您的问题包括您尝试过的代码的其余部分。不幸的是,这不是一个讨论论坛或教程。请花点时间阅读它所包含的链接。花些时间练习这些例子。它将让您了解Python提供的帮助您解决问题的工具。您可以简单地对字符串进行切片,而不是
i+1
input1=sum([int(n)if n==str_repr[i+1]else 0 for i,n in enumerate(str_repr[:-1]))
sum(sum(g)-k for k,g in groupby(l))
。我也喜欢这个:)非常有创意!稍微短一点:
sum((i和x==lst[i-1])*x代表i,x代表枚举(lst))
>>> n = 1234441122
>>> import re
>>> sum(map(int, re.sub(r'(.)(?!\1)', '', str(n))))
11