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