DOB*_*OBS 0 python list range python-3.x
问题就在这里。
\n这是List-2 的一部分
\n中型 python 列表问题——1 个循环。
\n给定一个整数数组,如果该数组某处的 2 旁边包含 2,则返回 True。
\nhas22([1, 2, 2]) \xe2\x86\x92 真
\nhas22([1, 2, 1, 2]) \xe2\x86\x92 假
\nhas22([2, 1, 2]) \xe2 \x86\x92 假
我一开始收到错误“列表索引超出范围”
\n我知道原来问题的第 4 行哪里出了问题,因为一旦它到达列表中的最后一个数字,它就无法再添加一个了。
\n我在下面提供了我的原始代码。第一个代码块是当我收到错误“索引超出范围”时。第二种解决方案有效,但我想知道是否有更干净的编写方式。
\n另外,在 CodingBat 上,当我运行我的解决方案时,它在底部显示“其他测试”失败,但没有示例,我不确定这意味着什么。
\n谢谢
\n这是我的代码块 - 第一次尝试:
\ndef has22(nums):\n for i in range(len(nums)):\n first = nums[i]\n second = nums[i+1]\n if first == second:\n return True\nRun Code Online (Sandbox Code Playgroud)\n我的解决方案:
\ndef has22(nums):\n size = len(nums)\n for i in range(len(nums)):\n first = nums[i]\n if size >= i+2:\n second = nums[i+1]\n if first == second:\n return True\n return False\nRun Code Online (Sandbox Code Playgroud)\n
因此,如果问题是解决方案是否可以写得更干净,我认为这样的事情应该有效:
def has22(nums):
return (2, 2) in zip(num, num[1:])
Run Code Online (Sandbox Code Playgroud)
而且看起来很干净。
一点解释 -zip从 2 个列表创建值对,因此我只是将输入列表切成 2 个,在第二个列表中我省略了第一个元素。然后我简单地检查压缩2, 2对中是否存在元组。
顺便说一句,我刚刚注意到您的解决方案中的一个错误 - 它返回True输入例如[2, 1](基本上是任何输入,其中2是倒数第二个。因此,要修复此错误并保留解决方案的原始“想法”,您可以这样写:
def has22(nums):
for i, el in enumerate(nums):
if el == 2 and i + 1 < len(nums) and nums[i + 1] == 2:
return True
return False
Run Code Online (Sandbox Code Playgroud)
enumerate是迭代带有索引的列表的首选方式。
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |