如何使用 Python 中的循环反转列表的一部分?
How can I reverse a section of a list using a loop in Python?
我需要一些帮助来使用循环在 Python 中反转列表的一部分。
我有一个列表:mylist = ['a', 'b', 'c', 'd', 'e', 'f']
还有一个索引号,这个号会告诉从哪里开始倒车。例如,如果反向索引号是 3,则它需要是这样的:['d', 'c', 'b', 'a', 'e', 'f']
我目前拥有的:
def list_section_reverse(list1, reverse_index):
print("In function reverse()")
n_list = []
for item in range( len(list1) ):
n_list.append( (list1[(reverse_index - 1) - item]) )
item += 1
return n_list
mylist = ['a', 'b', 'c', 'd', 'e', 'f']
print( list_section_reverse(mylist, 3) )
哪个returns['c', 'b', 'a', 'f', 'e', 'd']
如何更改我的代码,以便它打印出来 ['d', 'c', 'b', 'a', 'e', 'f']
?
您可以简单地使用:
def list_section_reverse(list1, reverse_index):
return list(reversed(list1[:reverse_index+1])) + list1[reverse_index+1:]
编辑:您现有解决方案的问题是您在 reverse_index
之后一直在倒车。如果您必须使用循环,试试这个:
def list_section_reverse(list1, reverse_index):
print("In function reverse()")
n_list = list1[:]
for i in range(reverse_index + 1):
n_list[i] = list1[-i-reverse_index]
return n_list
mylist = ['a', 'b', 'c', 'd', 'e', 'f']
print(list_section_reverse(mylist, 3))
你可以试试这个。这不使用切片,并且可以使用 while 循环或 for 循环。
def reversed_list(my_list, index):
result = []
list_copy = my_list.copy()
i = 0
while i < index+1:
result.append(my_list[i])
list_copy.remove(my_list[i])
i+=1
result.reverse()
return result + list_copy
或者使用 for 循环
def reversed_list(my_list, index):
result = []
list_copy = my_list.copy()
for i in range(len(my_list)):
if i < index + 1:
result.append(my_list[i])
list_copy.remove(my_list[i])
result.reverse()
return result + list_copy
pythonic 解决方案:
list1[reverse_index::-1] + list1[reverse_index+1:]
现在,这并没有像您要求的那样使用循环。好吧,不是明确的......相反,我们可以将上面的内容分解成它的组成部分 for 循环。
def list_section_reverse(list1, reverse_index):
if reverse_index < 0 or reversed_index >= len(list1):
raise ValueError("reverse index out of range")
reversed_part = []
for i in range(reverse_index, -1, -1): # like for i in [n, n-1, ..., 1, 0]
reversed_part.append(list1[i]
normal_part = []
for i in range(reverse_index + 1, len(list1)):
normal_part.append(list1[i])
return reversed_part + normal_part
是否允许复制列表?
def list_section_reverse(list1, reverse_index):
print("In function reverse()")
n_list = [ element for element in list1 ]
for item in range( reverse_index + 1 ):
n_list[ item ] = list1[ reverse_index - item ]
item += 1
return n_list
mylist = ['a', 'b', 'c', 'd', 'e', 'f']
print(list_section_reverse(mylist, 3))
出局:
In function reverse()
['d', 'c', 'b', 'a', 'e', 'f']
您可以使用切片就地修改列表。
mylist[:4] = mylist[:4][::-1]
我需要一些帮助来使用循环在 Python 中反转列表的一部分。
我有一个列表:mylist = ['a', 'b', 'c', 'd', 'e', 'f']
还有一个索引号,这个号会告诉从哪里开始倒车。例如,如果反向索引号是 3,则它需要是这样的:['d', 'c', 'b', 'a', 'e', 'f']
我目前拥有的:
def list_section_reverse(list1, reverse_index):
print("In function reverse()")
n_list = []
for item in range( len(list1) ):
n_list.append( (list1[(reverse_index - 1) - item]) )
item += 1
return n_list
mylist = ['a', 'b', 'c', 'd', 'e', 'f']
print( list_section_reverse(mylist, 3) )
哪个returns['c', 'b', 'a', 'f', 'e', 'd']
如何更改我的代码,以便它打印出来 ['d', 'c', 'b', 'a', 'e', 'f']
?
您可以简单地使用:
def list_section_reverse(list1, reverse_index):
return list(reversed(list1[:reverse_index+1])) + list1[reverse_index+1:]
编辑:您现有解决方案的问题是您在 reverse_index
之后一直在倒车。如果您必须使用循环,试试这个:
def list_section_reverse(list1, reverse_index):
print("In function reverse()")
n_list = list1[:]
for i in range(reverse_index + 1):
n_list[i] = list1[-i-reverse_index]
return n_list
mylist = ['a', 'b', 'c', 'd', 'e', 'f']
print(list_section_reverse(mylist, 3))
你可以试试这个。这不使用切片,并且可以使用 while 循环或 for 循环。
def reversed_list(my_list, index):
result = []
list_copy = my_list.copy()
i = 0
while i < index+1:
result.append(my_list[i])
list_copy.remove(my_list[i])
i+=1
result.reverse()
return result + list_copy
或者使用 for 循环
def reversed_list(my_list, index):
result = []
list_copy = my_list.copy()
for i in range(len(my_list)):
if i < index + 1:
result.append(my_list[i])
list_copy.remove(my_list[i])
result.reverse()
return result + list_copy
pythonic 解决方案:
list1[reverse_index::-1] + list1[reverse_index+1:]
现在,这并没有像您要求的那样使用循环。好吧,不是明确的......相反,我们可以将上面的内容分解成它的组成部分 for 循环。
def list_section_reverse(list1, reverse_index):
if reverse_index < 0 or reversed_index >= len(list1):
raise ValueError("reverse index out of range")
reversed_part = []
for i in range(reverse_index, -1, -1): # like for i in [n, n-1, ..., 1, 0]
reversed_part.append(list1[i]
normal_part = []
for i in range(reverse_index + 1, len(list1)):
normal_part.append(list1[i])
return reversed_part + normal_part
是否允许复制列表?
def list_section_reverse(list1, reverse_index):
print("In function reverse()")
n_list = [ element for element in list1 ]
for item in range( reverse_index + 1 ):
n_list[ item ] = list1[ reverse_index - item ]
item += 1
return n_list
mylist = ['a', 'b', 'c', 'd', 'e', 'f']
print(list_section_reverse(mylist, 3))
出局:
In function reverse()
['d', 'c', 'b', 'a', 'e', 'f']
您可以使用切片就地修改列表。
mylist[:4] = mylist[:4][::-1]