微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有反向功能但没有循环的反向阵列 first for循环在python中自动增加其变量下一个列表不是数组最后在一起

如何解决没有反向功能但没有循环的反向阵列 first for循环在python中自动增加其变量下一个列表不是数组最后在一起

因此,我尝试不使用反向函数而从.txt文件中反向数组。这就是我所拥有的。

numbers = read() #creates numbers array out of the txt file
numbersrev = numbers #blank array for reverse
numLength = len(numbers) #measures the length of the array

print(numbers)
print("Array length of numbers: ",numLength)

i = numLength
i = i-1 #since the array starts at 0 instead of 1
k = 0
for k in range(8):
    numbersrev[k] = numbers[i]
   print ("The ",i," element of numbers is the ",k," element of numbersrev")
   i -= 1
   k += 1

print(numbersrev)

这是我在vscode上调试后得到的:

[2,4,9,11,8,3,2,5,10]
Array length of numbers:  9
The  8  element of numbers is the  0  element of numbersrev
The  7  element of numbers is the  1  element of numbersrev
The  6  element of numbers is the  2  element of numbersrev
The  5  element of numbers is the  3  element of numbersrev
The  4  element of numbers is the  4  element of numbersrev
The  3  element of numbers is the  5  element of numbersrev
The  2  element of numbers is the  6  element of numbersrev
The  1  element of numbers is the  7  element of numbersrev
[10,10]

最上面的数组是原始数组,最下面的数组是假定的反转数组

我无法终生发现为什么它会在中途停止更改numbersrev数组。有人知道原因可能是什么吗?

解决方法

好吧,几件事...

first for循环在python中自动增加其变量。

如此:

for k in range(8):
    ...
    i -= 1
    k += 1

应为:

for k in range(8):
    ...
    i -= 1

无需手动增加k。

下一个列表不是数组。

python中的

列表与C之类的数组非常不同。 列表是可变的,默认情况下通过引用传递。 因此,当您尝试创建一个空数组时:

numbersrev = numbers #blank array for reverse

您实际上是在numbersnumbersrev

中引用相同的“列表”

应该要做的是numbersrev = []

然后在您的for循环中,只需将其附加到numbersrev而不是分配。

for k in range(numLength):
    numbersrev.append(numbers[i])
    print ("The ",i," element of numbers is the ",k," element of numbersrev")
    i -= 1

最后

您可以/应该在for循环中引用数字的长度,而不是硬编码的值,但是您仍然可以使用它(假设您只能获得8个数字)

for k in range(numLength):
    ...

在一起

numbers = read() #creates numbers array out of the txt file
numbersrev = [] #blank array for reverse
numLength = len(numbers) #measures the length of the array 

print(numbers)

print("Array length of numbers: ",numLength)


i = numLength

i = i-1 #since the array starts at 0 instead of 1

for k in range(numLength):
    numbersrev.append(numbers[i])
    print ("The "," element of numbersrev")
    i -= 1

print(numbersrev)

,

xmlns:th="https://www.thymeleaf.org"numbersrev = numbers设置为指向与numbersrev相同的列表,这意味着当您修改numbersnumbers时,您将同时修改另一个。同时。要制作该对象的实际副本,您需要调用numbersrev。另外,@ sahasrara62的评论正确,您需要调用numbersrev = numbers.copy()而不是for k in range(numLength)

,

您在这里所做的是,在此行中将反向数组分配为普通数组:

numbersrev = numbers #blank array for reverse

该循环的实际作用是:

numbers[0] = numbers[9] # [10,2,3,4,5,6,7,8,9,10]
numbers[1] = numbers[8] # [10,10]
numbers[2] = numbers[7] # [10,10]
numbers[3] = numbers[6] # [10,10]
numbers[4] = numbers[5] # [10,10]
numbers[5] = numbers[4] # [10,10]
numbers[6] = numbers[3] # [10,10]
numbers[7] = numbers[2] # [10,10]
numbers[8] = numbers[1] # [10,10]
numbers[9] = numbers[0] # [10,10]
...

如果您这样分配变量:

numLength = len(numbers) #measures the length of the array 
numbersrev = [0]*numLength #blank array for reverse

由于反向列表不再指向正常列表,您将获得正确的答案。

,

您面临的问题是因为这条线

numbersrev = numbers #blank array for reverse

在这一行中,您没有创建空数组,而是将numbers数组的引用保存在名为numbersrev的新变量中。这意味着当您在数组numbersrev中进行操作时,您还将同时更改numbers的值。为避免此类问题,您有两种选择:

复制包含切片的数组

通过这种方式,您将复制数组的值,而不是数组的引用。这意味着您对新阵列所做的更改不会更改原始阵列。

numbersrev = numbers[:]

创建一个空数组,并使用append代替赋值

此更改与您所做的更改有些不同,但是基本上没有创建数组的副本,而是创建了一个新的数组,该数组将填充到for循环中,例如:

numbers.rev = []
...
for k in range(8):
    numbersrev.append(numbers[i])

因此,使用第一个选项并更改k索引中的某些内容,我们将获得如下代码:

numbers = [2,11,10] # you can change for read
numbersrev = numbers[:] #copy array elements
numLength = len(numbers) #array length

print(numbers)
print("Array length of numbers: ",numLength)

i = numLength - 1

# you don't need to initialize k because it's initialized and incremented with range in the loop
for k in range(numLength):
    numbersrev[k] = numbers[i]
    print ("The "," element of numbersrev")
    i -= 1

print(numbersrev)

希望这可以帮助您解决问题,就像可以通过多种方式解决此问题的注释:切片(numbers[::-1],列表理解和其他一些方式一样。所有方法都是有效的,以防万一您想探索更多。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。