Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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,我正在尝试使用Python实现链表。因为我不熟悉python,所以我通过编写一些可以在C++中执行的代码来改进我对这种语言的掌握 /* Function to get the middle of the linked list*/ void printMiddle(struct Node *head) { struct Node *slow_ptr = head; struct Node *fast_ptr = head; if (head!=NULL) {

我正在尝试使用
Python
实现链表。因为我不熟悉
python
,所以我通过编写一些可以在
C++
中执行的代码来改进我对这种语言的掌握

  /* Function to get the middle of the linked list*/
void printMiddle(struct Node *head)
{
    struct Node *slow_ptr = head;
    struct Node *fast_ptr = head;

    if (head!=NULL)
    {
        while (fast_ptr != NULL && fast_ptr->next != NULL)
        {
            fast_ptr = fast_ptr->next->next;
            slow_ptr = slow_ptr->next;
        }
        printf("The middle element is [%d]\n\n", slow_ptr->data);
    }
}
这是一个计算链表中间位置的函数。我用
python
尝试了同样的方法,但它抛出了一个错误

TypeError:&:“非类型”和“节点”的操作数类型不受支持


我在这里做错了什么?解决方案是什么?

当需要逻辑and运算时,应该编写
,而不是使用按位and运算符
&
。它们具有不同的精度,因此对当前代码的评估就像编写了
fast\u ptr.next!=(无和快速)!=无
。这不起作用,因为
None&fast\u ptr
无效

你也检查了两个条件的顺序,而不是C++代码,这使得<>代码和的短路不利于你的利益(你将尝试检查<代码> FASTHPTR。下一个< /C> >即使<代码> FASTHPTR 是<代码> No.< /代码>本身。尝试将您的条件更改为

fast\u ptr!=无和快速\u ptr.next!=无

注意,与C++不同,在Python中,条件下不需要括号,而Road则不需要括号。使用

is
(或
is not
)操作符而不是
=
(或
!=
)测试
无也是常规(尽管不是必需的)。因此,您的
while
行的更惯用版本是:

while fast_ptr is not None and fast_ptr.next is not None:

当需要逻辑and运算时,应该编写
,而不是使用按位and运算符
&
。它们具有不同的精度,因此对当前代码的评估就像编写了
fast\u ptr.next!=(无和快速)!=无
。这不起作用,因为
None&fast\u ptr
无效

你也检查了两个条件的顺序,而不是C++代码,这使得<>代码和的短路不利于你的利益(你将尝试检查<代码> FASTHPTR。下一个< /C> >即使<代码> FASTHPTR 是<代码> No.< /代码>本身。尝试将您的条件更改为

fast\u ptr!=无和快速\u ptr.next!=无

注意,与C++不同,在Python中,条件下不需要括号,而Road则不需要括号。使用

is
(或
is not
)操作符而不是
=
(或
!=
)测试
无也是常规(尽管不是必需的)。因此,您的
while
行的更惯用版本是:

while fast_ptr is not None and fast_ptr.next is not None:


它抛出了另一个错误:
nonetype对象没有属性next
当与
None
比较时,您最好使用类似
fast\u ptr的东西。next不是None,fast\u ptr不是None
@PRMoureu为什么这会有任何区别?没有得到it@BOTJR. Blckknght一直在我面前回答,如果您在前面检查
fast\u ptr不是None
,如果
fast\u ptr
是None,测试将停止,并且它避免返回下一个表达式的错误比较顺序是因为如果
fast\u ptr是None
fast\u ptr.next
不存在。C++有完全相同的问题。排序测试很有帮助,因为
&&
都是快捷方式;如果第一个值为false,则不会计算第二个值。它会引发另一个错误:
nonetype对象没有属性next
当与
None
进行比较时,最好使用类似
fast\u ptr的方法。next不是None,fast\u ptr不是None
@PRMoureu这有什么区别吗?没有得到it@BOTJR. Blckknght一直在我面前回答,如果您在前面检查
fast\u ptr不是None
,如果
fast\u ptr
是None,测试将停止,并且它避免返回下一个表达式的错误比较顺序是因为如果
fast\u ptr是None
fast\u ptr.next
不存在。C++有完全相同的问题。排序测试很有帮助,因为
&&
都是快捷方式;如果第一个值为false,则永远不会对第二个值求值。例如,许多C语言习惯用法实际上是非常非Python的,或者根本不存在,而且有大量的内置代码,使得许多实际代码不需要从头开始编写。在这个例子中-检查
collections.deque
…@JonClements我同意。谢谢。例如:
d=collections.deque([3,1,4,6,7,1])
然后
middle=d[len(d)//2]
就是你在这里做的事,然后是
\u getitem\uu
[]
)将根据需要遍历链接以检索您的项目…因此您可以执行
d[-3]
从尾部遍历或
d[2]
从头部遍历等操作。。。所有这些都为您完成了。请不要像编写另一种语言那样陷入编写Python的陷阱。例如,许多C语言习惯用法实际上是非常非Python的,或者根本不存在,而且有大量的内置代码,使得许多实际代码不需要从头开始编写。在这个例子中-检查
collections.deque
…@JonClements我同意。谢谢。例如:
d=collections.deque([3,1,4,6,7,1])
然后
middle=d[len(d)//2]
就是你在这里做的事,然后是
\u getitem\uu
[]
)将根据需要遍历链接以检索您的项目…因此您可以执行
d[-3]
从尾部遍历或
d[2]
从头部遍历等操作。。。都为你做了。