Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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 - Fatal编程技术网

Python 当我认为这个对象是一个列表时,为什么它被视为整数?

Python 当我认为这个对象是一个列表时,为什么它被视为整数?,python,Python,这是一个实践问题,内容如下: 定义一个过程,该过程接收1-9中的数字字符串,并输出一个包含以下参数的列表: 字符串中的每个数字都应插入列表中 如果字符串中的数字x小于或等于前面的 数字y,数字x应插入到子列表中。持续 将以下数字添加到子列表,直到达到一个数字 z大于数字y。然后将这个数字z添加到 正常列表并继续 示例: string = '543987'; result = [5,[4,3],9,[8,7]] string= '987654321'; result = [9,[8,7,6,5,

这是一个实践问题,内容如下:

定义一个过程,该过程接收1-9中的数字字符串,并输出一个包含以下参数的列表:

字符串中的每个数字都应插入列表中

如果字符串中的数字x小于或等于前面的 数字y,数字x应插入到子列表中。持续 将以下数字添加到子列表,直到达到一个数字 z大于数字y。然后将这个数字z添加到 正常列表并继续

示例:

string = '543987'; result = [5,[4,3],9,[8,7]]

string= '987654321'; result = [9,[8,7,6,5,4,3,2,1]]

string = '455532123266'; result = [4, 5, [5, 5, 3, 2, 1, 2, 3, 2], 6, [6]]

string = '123456789'; result = [1, 2, 3, 4, 5, 6, 7, 8, 9]
我的代码如下:

def numbers_in_lists(s):
    n=len(s)
    p=[]
    i=0
    while i<=n-1:
        p.append(int(s[i]))
        i=i+1

    r=[p[0]]    
    if p[1]<=p[0]:
        r.append([p[1]])
    else:
        r.append(p[1])
    if n<=2:
        return r
    j=2
    while j<=n-1:
        if p[j]<=p[j-1]:
            if p[j-1]<=p[j-2]:
                r[-1].append(p[j])
            else:
                r.append(p[j])
        else:
            if p[j]<=p[j-2]:
                r[-1].append(p[j])
            else:
                r.append(p[j])
        j=j+1
    return r
问题似乎出在这一行:r[-1].appendp[j]。但我认为当满足前面的条件时,r[-1]不应该是整数,而是一个列表。

这行代码:

r[len(r)-1].append(p[j])
具体到:

r: your overall list
len(r): an integer value based on calculation of the length of r 
-1: also an integer value
让我们假设lenr是5岁

因此5-1等于4

r[4]使用Python索引来标识列表r中的特定元素。具体来说,位置4处的元素从索引0处开始计数

如果位置4处的元素是一个类似整数的数字,而不是一个子列表,那么Python无法向该数字追加任何内容,因为数字没有.append方法

例子: 假设我们有一个如下列表:

r = [7, 13, 42] 
我们想附加一个99

>>> r.append(99)
[7, 13, 42, 99]
但是如果我们索引到r中的一个整数,而不是r中的一个子列表,我们就会得到错误

>>> r[1].append(99)     # r[1] is the value 13.
AttributeError: 'int' object has no attribute 'append'
最后,如果我们要索引的项是一个子列表,那么append可以正常工作

# presume r now equals: [7, 13, 42, 99, [1]]
#    and we want to append a 1337
>>> r[-1].append(1337)     # r[-1] is the last value and is a sublist
[7, 13, 42, 99, [1, 1337]]
可能的解决办法: 这可能有助于解决您的问题,并使代码的故障排除更加容易

def numbers_in_lists(s):
    # use a list comprehension to simplify the process of making a list of
    #     integers
    p = [int(x) for x in s]

    # set two sentinel values to help control the code logic/decisions
    flag = False
    previous_high = 0

    # create an empty list
    r = []

    # iterate over all the digits...
    for num in p:

        # the code logic is broken into three tests 
        if num <= previous_high and not flag:
            # if flag is False create a sublist
            r.append([num])
            flag = True

        elif num < previous_high and flag:
            # if flag is True append to a sublist we previously created
            r[-1].append(num) 

        elif num > previous_high:
            # Otherwise, append to the main list again   
            r.append(num)
            previous_high = num
            flag = False

    return r
这行代码:

r[len(r)-1].append(p[j])
具体到:

r: your overall list
len(r): an integer value based on calculation of the length of r 
-1: also an integer value
让我们假设lenr是5岁

因此5-1等于4

r[4]使用Python索引来标识列表r中的特定元素。具体来说,位置4处的元素从索引0处开始计数

如果位置4处的元素是一个类似整数的数字,而不是一个子列表,那么Python无法向该数字追加任何内容,因为数字没有.append方法

例子: 假设我们有一个如下列表:

r = [7, 13, 42] 
我们想附加一个99

>>> r.append(99)
[7, 13, 42, 99]
但是如果我们索引到r中的一个整数,而不是r中的一个子列表,我们就会得到错误

>>> r[1].append(99)     # r[1] is the value 13.
AttributeError: 'int' object has no attribute 'append'
最后,如果我们要索引的项是一个子列表,那么append可以正常工作

# presume r now equals: [7, 13, 42, 99, [1]]
#    and we want to append a 1337
>>> r[-1].append(1337)     # r[-1] is the last value and is a sublist
[7, 13, 42, 99, [1, 1337]]
可能的解决办法: 这可能有助于解决您的问题,并使代码的故障排除更加容易

def numbers_in_lists(s):
    # use a list comprehension to simplify the process of making a list of
    #     integers
    p = [int(x) for x in s]

    # set two sentinel values to help control the code logic/decisions
    flag = False
    previous_high = 0

    # create an empty list
    r = []

    # iterate over all the digits...
    for num in p:

        # the code logic is broken into three tests 
        if num <= previous_high and not flag:
            # if flag is False create a sublist
            r.append([num])
            flag = True

        elif num < previous_high and flag:
            # if flag is True append to a sublist we previously created
            r[-1].append(num) 

        elif num > previous_high:
            # Otherwise, append to the main list again   
            r.append(num)
            previous_high = num
            flag = False

    return r
r是一个列表。因此,您可以安全地执行r.appendp[1]。但是r[lenr-1]是列表r中位于lenr-1位置的一个元素,它是一个整数,而不是一个列表。r[lenr-1]。appendp[j]正在对int执行append,这是不可能的。因此出现了这个错误

例如: 考虑R=(1, 2, 3,4, 5)

对于您的代码,输入s='4655…'会显示此错误。因为您附加了4,所以您会看到6更大,所以您可以将其添加为下一个元素。然后你看到5。您的代码将其添加为元素。然后又来了一个5。问题就在这里。在这个步骤中,p[j]r是一个列表。因此,您可以安全地执行r.appendp[1]。但是r[lenr-1]是列表r中位于lenr-1位置的一个元素,它是一个整数,而不是一个列表。r[lenr-1]。appendp[j]正在对int执行append,这是不可能的。因此出现了这个错误

例如: 考虑R=(1, 2, 3,4, 5)


对于您的代码,输入s='4655…'会显示此错误。因为您附加了4,所以您会看到6更大,所以您可以将其添加为下一个元素。然后你看到5。您的代码将其添加为元素。然后又来了一个5。问题就在这里。在这一步中,p[j]是否与python相矛盾?我们可以告诉您的是打印、调试等,但我要说的是,如果python说它是int,请确保它是int.r,这是一个列表。r[lenr-1]是该列表中的一个项,显然是int类型的项。@Adelin Python说它是int,所以它是int,我和你们一样信任Python,但我试图用Python的方式来看待列表。谢谢。只是简单介绍一下python。要访问列表的最后一个元素,可以使用r[-1]@Esser420,而不是使用r[lenr-1],是的,这要简单得多。我已相应地修正了我的问题。谢谢。你和python有矛盾吗?我们可以告诉您的是打印、调试等,但我要说的是,如果python说它是int,请确保它是int.r,这是一个列表。r[lenr-1]是该列表中的一个项,显然是int类型的项。@Adelin Python说它是int,所以它是int,我和你们一样信任Python,但我试图用Python的方式来看待列表。谢谢。只是简单介绍一下python。要访问列表的最后一个元素,可以使用r[-1]@Esser420,而不是使用r[lenr-1],是的,这要简单得多。我已相应地修正了我的问题。谢谢。这个答案可能更好的唯一方法是,如果你继续沿着线索回到原来的sw,我想说的是,考虑到我编写代码的方式,如果满足r[-1].appendp[j]之前的条件,t
我相信r[-1]是一个列表,更具体地说,是列表中的一个列表。在这种情况下,我是否可以将append应用于此列表(它本身是另一个列表的最后一个元素)?如果您引用的项目是子列表,则绝对可以将append应用于列表中的子列表。目前,您的代码无法准确确定您所指向的项目是否为子列表。我理解您所说的一切,但这不是我想要的。我真正的问题是,我相信当p[j]你的代码是清晰的。前面的_high变量也启发了我。非常感谢。这个答案可能会更好的唯一方法是,如果您继续跟踪跟踪原始的路径,我想说的是,考虑到我编写代码的方式,如果满足r[-1].appendp[j]之前的条件,那么我相信r[-1]将是一个列表,更具体地说,是列表中的一个列表。在这种情况下,我是否可以将append应用于此列表(它本身是另一个列表的最后一个元素)?如果您引用的项目是子列表,则绝对可以将append应用于列表中的子列表。目前,您的代码无法准确确定您所指向的项目是否为子列表。我理解您所说的一切,但这不是我想要的。我真正的问题是,我相信当p[j]你的代码是清晰的。前面的_high变量也启发了我。非常感谢。你说的我都明白,但这不是我想要的。我真正的问题是,我相信当p[j]用string='4655…'遍历时,你会知道你哪里出错了我已经修改了你的代码。这不会显示您的错误,适用于所有情况:请让我知道这是否有用。你的回答指出了我的错误。所以这很有帮助:我还没有看过你的代码,因为我想自己解决这个问题。我理解你所说的一切,但这不是我想要的。我真正的问题是,我相信当p[j]用string='4655…'遍历时,你会知道你哪里出错了我已经修改了你的代码。这不会显示您的错误,适用于所有情况:请让我知道这是否有用。你的回答指出了我的错误。所以这很有帮助:我还没有看过你的代码,因为我想自己解决这个问题。