Python列表附加真正的布尔值

Python列表附加真正的布尔值,python,list,boolean,append,Python,List,Boolean,Append,下面的[不完整]代码用于接收长度为x-n的n到x数字,并返回下一个泛数字的值。代码识别从作为参数传递给函数的数字中缺少的n和x之间的数字,并返回(目前,直到函数进一步开发)两个列表,原始数字本身及其各个数字作为列表的成员,以及以数字n到x作为成员的列表,用布尔值True替换原始长度x-n中的数字 尽管对于Enthoude Canopy中的nextPandigital(1023456789,0,9)的输入参数,返回的第二个列表应为[True,True,True,True,True,True,Tru

下面的[不完整]代码用于接收长度为x-n的n到x数字,并返回下一个泛数字的值。代码识别从作为参数传递给函数的数字中缺少的n和x之间的数字,并返回(目前,直到函数进一步开发)两个列表,原始数字本身及其各个数字作为列表的成员,以及以数字n到x作为成员的列表,用布尔值True替换原始长度x-n中的数字

尽管对于Enthoude Canopy中的
nextPandigital(1023456789,0,9)
的输入参数,返回的第二个列表应为
[True,True,True,True,True,True,True]
,但返回的第二个列表的值实际上是
[True,1,True,True,True,True,True,True]
,原始
requiredDigits
列表中的1未替换为
True

我知道循环或代码的一般流程没有问题,因为当注释了
requiredDigits[x]=True
代码行,并且未注释当前注释的代码时,代码按预期工作,将
中的所有数字都替换为字符串值'
True.
'

我已尝试解决此问题。然而,我无法确定其来源。我考虑了
True==1
返回True的事实。但是,当值True替换为False时,在
requiredDigits[x]=True
行中,代码仍按预期工作


对此问题的任何回答/帮助/建议/建议都将不胜感激。提前谢谢。

您正在检查您正在更新的同一列表,这是非常危险的

在第二次迭代中,变量为:

number=1
requiredDigits = [True, 1, 2, 3, 4, 5, 6, 7, 8, 9]
因此,当您执行
requiredDigits.index(1)
时,有一个匹配项,但它没有到达
1
,因为它发生在
True==1
中,所以它返回索引
0


但是,一般来说,这个实现并不是太像python,最好检查一下您正在检查的列表与正在更新的列表相同,而且总是很危险

在第二次迭代中,变量为:

number=1
requiredDigits = [True, 1, 2, 3, 4, 5, 6, 7, 8, 9]
因此,当您执行
requiredDigits.index(1)
时,有一个匹配项,但它没有到达
1
,因为它发生在
True==1
中,所以它返回索引
0


但一般来说,这种实现并没有太多的python功能,最好检查一下问题在于使用
索引来查找分配到哪里。由于
True
等于1,因此您错误地认为为
0
输入的
True
就是您接下来要替换的
1

一种解决方案是在迭代列表时使用
枚举
获取索引,而不是在以后使用
索引
查找索引:

for x, number in enumerate(requiredDigits):
    if str(number) in str(digits):
        requiredDigits[x] = True
一般来说,更好的解决方案是使用列表理解一次性创建列表,而不是从数字开始,然后替换其中一些:

requiredDigits = [True if num in digits else num for num in range(lower,upper+1)]

在针对
数字的成员资格测试中,我还消除了对
str
的不必要调用。您正在进行子字符串测试,而不是测试数字本身是否在列表中。这可能不会导致错误,因为您关心的数字都是一位数,并且列表的字符串表示形式没有任何多余的数字。但一般来说,在不需要的情况下使用字符串操作不是一个好主意。

问题在于使用
索引查找分配到的位置。由于
True
等于1,因此您错误地认为为
0
输入的
True
就是您接下来要替换的
1

一种解决方案是在迭代列表时使用
枚举
获取索引,而不是在以后使用
索引
查找索引:

for x, number in enumerate(requiredDigits):
    if str(number) in str(digits):
        requiredDigits[x] = True
一般来说,更好的解决方案是使用列表理解一次性创建列表,而不是从数字开始,然后替换其中一些:

requiredDigits = [True if num in digits else num for num in range(lower,upper+1)]

在针对
数字的成员资格测试中,我还消除了对
str
的不必要调用。您正在进行子字符串测试,而不是测试数字本身是否在列表中。这可能不会导致错误,因为您关心的数字都是一位数,并且列表的字符串表示形式没有任何多余的数字。但总的来说,,不需要时使用字符串操作不是一个好主意。

我可能应该澄清:n到x的数字意味着数字是问题,包含从给定数字n到给定数字x的所有数字。我可能应该澄清:n到x的数字意味着数字是问题,包含从给定数字n到x的所有数字给定的数字x。谢谢你的回答。这真的很有帮助。然而,我无法理解列举的确切目的。它是简单地为列表的每个成员分配一个类似于索引值的位置值,还是做更多的事情?内置函数
enumerate
适用于任何类型的iterable。它将iterable的各个值转换为
索引、值
2元组。您可以阅读,或者,在版本2.3中,它建议将其添加到Python中。因此,本质上,x,number是表示元组的两个值的变量。是的,这两个值由
for
循环解包,就像您可以使用赋值解包元组一样:
x,number=two\u tuple
谢谢您的回答。这真的很有帮助。然而,我无法理解列举的确切目的。这是简单的assi吗