Python 连接列表的最后一个值和第一个值
我有一个数字列表,比如说Python 连接列表的最后一个值和第一个值,python,list,Python,List,我有一个数字列表,比如说list=[0,1,0,1,0]。我必须检查列表中的每个元素I是否等于它的前一个元素和它后面的元素,如果等于,则将其值更改为前一个。我将此任务描述为: i-1=x i+1=y for i in list: if x=y and i!=x i=x elif x!=y i=i 但是我需要连接列表中的第一个和最后一个元素,这样如果I=list[0]:x=list[4](和y=list[2])。我的想法是定义
list=[0,1,0,1,0]
。我必须检查列表中的每个元素I是否等于它的前一个元素和它后面的元素,如果等于,则将其值更改为前一个。我将此任务描述为:
i-1=x
i+1=y
for i in list:
if x=y and i!=x
i=x
elif x!=y
i=i
但是我需要连接列表中的第一个和最后一个元素,这样如果I=list[0]
:x=list[4]
(和y=list[2]
)。我的想法是定义另一个循环,如下所示:
if i=list[0]
x=list[4]
但是当我执行这个程序时,它写到x=list[0]
是“语法错误:无效语法”。首先,我不太清楚这是为什么:我在想我没有定义x(但我定义了!),或者我可能没有在正确的地方定义它(我不确定我应该在哪里定义它)。另一方面,这是连接列表的最后一个值和第一个值的方法吗 试试这个:
i-1=x
i+1=y
for i in list:
if x==y and i!=x :
i=x
elif x!=y
i=i
=
表示分配,而=
表示平等测试。python中的冒号:
定义了作用域的开头(缩进),因此需要在if`之后加上:'来定义其作用域块。下面是一个完全按照您的要求执行的代码
test=[0,1,0,1,0] # don't use 'list' as variable name
for j in range(len(test)): # j=index of current
i = (j-1) % len(test) # i=index of previous
k = (j+1) % len(test) # k = index of next
if test[i] == test[k]: # equal to previous and next
test[j] = test[i] # change to previous
print(test)
单个等号是赋值,而不是比较,并且您缺少冒号。感谢您的编辑和回答!;)我通常如何使代码的某些部分看起来像这里的代码?这是标记,每行的开头需要四个空格作为代码块。您可以选择粘贴的代码并点击Ctrl-K或{}
按钮。有关更多信息,请参阅格式化帮助(通过?
按钮)。谢谢,这非常有用!:)@杰列纳克维扬。不客气点击左边的复选标记接受我的答案,这样其他人也会得到同样的帮助,谢谢。没错!现在,我成功地执行了代码,它只给了我具有相同值的列表,尽管很明显它经历了所有的“i”。作为您的代码,我不明白您为什么需要%len(test)?%len(test)
称为模算术(搜索该术语)。这正是允许连接第一个值和最后一个值的内容。例如,当j等于0时,我将是-1(这在python中仍然有效,因为它接受-1作为索引),写入(j-1)%5
将使索引值在0到4之间。但是,当j等于最后一个索引时(在您的示例中,当j=4),k将为5,并导致“越界”错误。看看好吧,我想这正是我需要的。我还有一个问题:你很难过一个代码应该是有效的(引用)“它是等于前面的值还是后面的值”。我不太确定你是否理解我的问题所在。所以,让我再解释一遍(也许我不理解你)。当前值只有在前一个值与后一个值相等时才需要更改。如果这些值不相等,那么当前值必须保持不变。好的,有了这个说明,您应该编写If test[i]==test[k]:
。你的代码应该可以工作了。我试过你的例子,它给出了0,0,0,0,0
。我编辑了我的答案。非常感谢,这真的很有帮助:)