Python 元素的差异,以找到相同的相邻元素
我昨晚才开始学蟒蛇。我已经完成了一些简单的事情,比如从用户那里获取一个文件,逐行打开并将该文件读入列表,计算每行的整数数,使用set计算每行的唯一整数数,以及计算每行出现最多的整数数 我正在研究并希望实现的另一个有趣的概念是基于相邻整数的数量计算整数的数量。这听起来可能有点混乱,因此我将在下面解释: 假设我有一个包含以下值的列表:Python 元素的差异,以找到相同的相邻元素,python,algorithm,python-2.7,Python,Algorithm,Python 2.7,我昨晚才开始学蟒蛇。我已经完成了一些简单的事情,比如从用户那里获取一个文件,逐行打开并将该文件读入列表,计算每行的整数数,使用set计算每行的唯一整数数,以及计算每行出现最多的整数数 我正在研究并希望实现的另一个有趣的概念是基于相邻整数的数量计算整数的数量。这听起来可能有点混乱,因此我将在下面解释: 假设我有一个包含以下值的列表: ['1', '2', '2', '2', '2', '2', '3', '3', '4', '4', '4', '4', '5', '5', '6', '7', '7
['1', '2', '2', '2', '2', '2', '3', '3', '4', '4', '4', '4', '5', '5', '6', '7', '7', '7', '1', '1\n']
(我相信我必须将字符串转换为int?)
第一个整数是1,第二个整数是2。差异不是0,因为两个整数不相同,所以不要增加计数器。取下一个整数为2,上一个整数为2。差值为0,因此两个整数相同,因此增加一个计数器。等等在这种情况下,最终值为8
我查阅了SO和互联网上的相邻整数计算,只找到了我认为可以应用的减法算法
以下是我到目前为止在将字符串转换为int时没有遇到的复杂问题(关于这一点,我有一个问题):
以下是输出:
[1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, -6, 0]
Different numbers
7
第一次打印仅用于测试,但当计算正确时,最后一次打印应为9
关于如何改进我的算法以计算不包括相同相邻整数的列表中的整数总数,有什么建议吗?另外,由于我刚刚开始自学Python,因此非常感谢您对我的代码的总体改进提出的任何建议。多谢各位
更新:
所以我意识到我的计算值不正确,总数应该是8而不是9。这里有一个更好的解释:
我的列表中有以下数字:
[1,2,2,2,2,2,3,3,4,4,4,4,5,5,6,7,7,7,1,1]
总共有20个元素。
相邻整数的数目为8。
从1开始,看2。1和2不相同,因此增量不同。查看下一个值2和上一个值2。2和2是相同的。查看下一个值2和上一个值2。2和2是相同的。查看下一个值2和上一个值2。2和2是相同的。查看下一个值2和上一个值2。2和2是相同的。查看下一个值3和上一个值2。3和2不相同,因此增量不同。等等
现在所有的答案都比正确答案少了一个,这是因为从数据[0]开始,我只需要在总数中加一个吗
更新:
输出:
代码:
输出应为:
bursts:9
bursts:4
bursts:5
bursts:5
bursts:1
bursts:1
bursts:8
python的好处是使用您已经免费获得的东西。比如: 这将通过压缩以下两个列表生成所有对:
[1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, -6, 0] # numbers
[0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, -6, 0] # numbers[1:]
# generates: [(1, 0), (0, 0), (0, 0), (0, 0), (0, 1), (1, 0),
# (0, 1), (1, 0), (0, 0), (0, 0), (0, 1), (1, 0),
# (0, 1), (1, 1), (1, 0), (0, 0), (0, -6), (-6, 0)]
然后,它检查哪些是相同的(它还使用True
计数为1
,因此一个简单的sum
有效)
保留索引和处理边缘情况通常是可以避免的。python的好处是使用您已经免费获得的内容。比如: 这将通过压缩以下两个列表生成所有对:
[1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, -6, 0] # numbers
[0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, -6, 0] # numbers[1:]
# generates: [(1, 0), (0, 0), (0, 0), (0, 0), (0, 1), (1, 0),
# (0, 1), (1, 0), (0, 0), (0, 0), (0, 1), (1, 0),
# (0, 1), (1, 1), (1, 0), (0, 0), (0, -6), (-6, 0)]
然后,它检查哪些是相同的(它还使用True
计数为1
,因此一个简单的sum
有效)
通常可以避免保留索引和处理边缘情况。更简单地说,使用每次递增1的计数器并检查相邻值是否相等:
l1 = ['1', '2', '2', '2', '2', '2', '3', '3', '4', '4', '4', '4', '5', '5', '6', '7', '7', '7', '1', '1\n']
nums = [int(num) for num in l1]
sum(nums[i] == nums[i+1] for i in range(len(nums)-1))
Out[157]: 12
更简单地说,使用每次递增1的计数器并检查相邻值是否相等:
l1 = ['1', '2', '2', '2', '2', '2', '3', '3', '4', '4', '4', '4', '5', '5', '6', '7', '7', '7', '1', '1\n']
nums = [int(num) for num in l1]
sum(nums[i] == nums[i+1] for i in range(len(nums)-1))
Out[157]: 12
以下是工作代码:
numbers = [1,3,7,11,25,36,57,678,999]
count = sum([numbers[i] == numbers[i+1] for i in range(len(numbers)-1)])
>>> count
8
例如:
data = [1,2,2,2,2,2,3,3,4,4,4,4,5,5,6,7,7,7,1,1]
result = sum([data[i] == data[i+1] for i in range(len(data)-1)])
>>> result
7
以下是工作代码:
numbers = [1,3,7,11,25,36,57,678,999]
count = sum([numbers[i] == numbers[i+1] for i in range(len(numbers)-1)])
>>> count
8
例如:
data = [1,2,2,2,2,2,3,3,4,4,4,4,5,5,6,7,7,7,1,1]
result = sum([data[i] == data[i+1] for i in range(len(data)-1)])
>>> result
7
我不明白为什么应该是9。@StefanPochmann你是对的。应该是8,但下面的计算都不正确(少了一个)。我将更新更多的解释。谢谢。我不明白为什么应该是9。@StefanPochmann你是对的。应该是8,但是下面的计算都不正确(少了一个)。我将更新更多的解释。谢谢。很好地使用了iterables!很好地使用了iterables!我执行了其他测试用例,结果的值必须增加1,因为列表从位置0开始。非常感谢。现在,我接受了你的回答,因为它对我最有帮助。不过,我确实说过我还有一个问题,那就是如何使用列表中的字符串转换为int。先生/女士,有什么建议吗?@Justin_Finland,当然,您可以使用
int([data[I])==int(data[I+1]))
将str
强制转换为int
,但要确保数据有效,因为如果字符串中没有int
值,则会产生错误-:list和int的操作数类型不受支持:result=sum(int([names_list[i]]==int(names_list[i+1]),范围(len中的i([names_list-1]))
请仔细检查您的代码:将:int([names\u list[i]]
替换为int([names\u list[i])
我执行了其他测试用例,结果值必须增加1,因为列表从位置0开始。谢谢!现在,我接受了你的答案,因为它对我最有帮助。但是,我确实说过我还有一个问题,那就是如何使用列表中的字符串转换为int。先生/女士,有什么建议吗@Justin_Finland,当然,您可以使用int([data[i])==int(data[i+1])
将str
强制转换为int
,但请确保您拥有有效的数据,因为当您在不支持的字符串操作数类型中没有int
值时,会导致错误-:list和int的result=sum(int([names\u list[i]]==int(名称列表[i+1])表示范围内的i(len(int(名称列表-1щщ))
请仔细检查