Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays - Fatal编程技术网

Python 为什么我的代码在这个简单的练习中失败了?

Python 为什么我的代码在这个简单的练习中失败了?,python,arrays,Python,Arrays,我正在做一个编码练习: 给定一个整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增序列 示例 对于sequence=[1,3,2,1],输出应该是 虚假的 这个数组中没有一个元素可以被移除,以获得严格递增的序列 对于sequence=[1,3,2],输出应该是 是的 您可以从数组中删除3以获得严格递增的序列[1,2]。或者,您可以删除2以获得严格递增的序列[1,3] 所以我写了这段代码: def almostIncreasingSequence(sequence):

我正在做一个编码练习:

给定一个整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增序列

示例

  • 对于sequence=[1,3,2,1],输出应该是 虚假的

    这个数组中没有一个元素可以被移除,以获得严格递增的序列

  • 对于sequence=[1,3,2],输出应该是 是的

    您可以从数组中删除3以获得严格递增的序列[1,2]。或者,您可以删除2以获得严格递增的序列[1,3]

所以我写了这段代码:

def almostIncreasingSequence(sequence):
    first_list, second_list = [x for x in sequence], [x for x in sequence]
    for i in range(len(sequence)-1):
        if sequence[i] >= sequence[i+1]:
            first_list.remove(sequence[i])
            second_list.remove(sequence[i+1])
            break

    if first_list == sorted(set(first_list)) or second_list == sorted(set(second_list)):
        return True
    else:
        return False
代码通过了13/15次测试

下面是我的代码失败的两个输入:

[1, 2, 3, 4, 3, 6]

[3, 5, 67, 98, 3]

两个输入都应该返回True,但我的代码返回False。有什么想法吗?

拿下你的第一张清单,
[1,2,3,4,3,6]
。在
第一个列表
第二个列表
上运行for循环后,这些变量的值为:

In [9]: first_list
Out[9]: [1, 2, 3, 3, 6]

In [10]: second_list
Out[10]: [1, 2, 4, 3, 6]
if
的第一部分为
False
,因为:

In [12]: sorted(set(first_list))
Out[12]: [1, 2, 3, 6]
通过将列表放入一组,您已经失去了其中一个3

if
的第二部分为
False
,因为
第二个列表未排序

因此,
if
语句的两个部分都是
False
,函数返回
False

阅读:

从列表中删除值为x的第一项。如果没有此类项目,则为错误

使用
pop(index)
,而不是
remove(value)


序列的类型是什么?它是一个列表吗?是的,它是一个列表。那么它的意义是什么:
first\u list,second\u list=[x代表x的顺序],[x代表x的顺序]
?复制列表的python方法是
first\u list=sequence[:]
@cezar制作两个列表副本的目的是以后能够比较它们。好的,在for循环之后,第一个列表就像你说的,[1,2,3,3,6]。但是,第二个列表应该是:[1,2,3,4,6],对吗?因为我们正在移除索引4(i+1)处的元素。在这种情况下,它等于sorted(set([1,2,3,4,6])函数应该返回True。或者我遗漏了什么?哦,没关系,Tomasz的答案解释了为什么我错了,而你是对的。完整的答案是这个答案和@Tomasz的组合。非常感谢,我在这个练习中坚持了至少几个小时,你的解释绝对完美。
>>> l = [1, 2, 3, 4, 3, 6]
>>> l.remove(3)
>>> print(l)
[1, 2, 4, 3, 6]
first_list.pop(i)
second_list.pop(i+1)