gpt4 book ai didi

python - 在 Python 中执行三重剪切

转载 作者:行者123 更新时间:2023-11-30 23:04:27 25 4
gpt4 key购买 nike

我需要执行三重剪切。我的函数接受 int 参数列表,在该列表中的某个位置有 27 和 28。我需要做的是检查先出现的 27 或 28,27 或 28 之前的所有内容(取决于先出现的)都去列表底部以及 27 或 28 之后的所有内容(具体取决于第二个内容将位于列表顶部。

这是一个例子:

>>> test_list = [1, 28, 3, 4, 27, 5, 6, 7, 8]
>>> triple_cut(test_list)
>>> test_list = [5, 6, 7, 8, 28, 3, 4, 27, 1]

这是我到目前为止所拥有的

#find the index positions of the two jokers
find_joker1 = deck.index(27)
find_joker2 = deck.index(28)
print(find_joker1, find_joker2)

new_list = []

# use selection to check which joker occurs first
if(find_joker1 > find_joker2): # joker2(28) occurs first in the list

# loop throgh each element in the list that occurs before Joker1
# and move them to the end of the list
# move element that occur after Joker1(27) to the top of the list
for i in deck:
if(deck.index(i) > find_joker1): # elements that occur after second joker
new_list.append(i) # move those element to the top of the list
new_list.append(28) # add Joker2


for i in deck: # element between the two Jokers
if(deck.index(i) > find_joker2 and deck.index(i) < find_joker1):
new_list.append(i)
new_list.append(27)


for i in deck: # elements before the first joker
if(deck.index(i) < find_joker2):
new_list.append(i)
print(new_list)

最佳答案

可以通过切片来解决。

def triple_cut(lst):
a=lst.index(27)
b=lst.index(28)
if a>b:
return lst[a+1:]+ lst[b:a+1]+ lst[:b]

else:
return lst[b+1:]+ lst[a:b+1]+ lst[:a]

实际发生的情况:

  • 对较大索引之后的所有内容进行切片。
  • 从索引较低的切片到索引较高的切片。
  • 对索引较低的之前的所有内容进行切片。
  • 将所有内容加在一起。

注意:在切片期间,第一个索引包含在内,第二个索引不包含。

演示,

>>test_list = [1, 28, 3, 4, 27, 5, 6, 7, 8] 
>>tripplecut(test_list)
[5, 6, 7, 8, 27, 3, 4, 28, 1]

一些解释:

通过切片,可以获得列表的一部分。首先看看切片实际上是如何工作的:

lst[start:end:increment]

为了与您的问题相关,请跳过增量部分。默认增量为 1,正是我们所需要的。因此,我们将如下所示对列表进行切片:

lst[start:end]

让我们用您给定的列表做一些实验。

>>> test_list = [1, 28, 3, 4, 27, 5, 6, 7, 8]

假设我们想要一个从索引 2(3) 到索引 5(27) 的列表。只需执行以下操作:

>>> test_list[2:6]
[3,4,27]

为什么我用 6 代替 5。那是因为:

In case of slicing, the start index is inclusive, but the end index is exclusive.

如果我们想要一个从 start 到索引 4(27) 的列表怎么办?做:

>> test_list[:5]
[1,28,3,4,27]

如果我们希望索引 3 结束呢?只需执行以下操作:

>>test_list[3:]
[4, 27, 5, 6, 7, 8]

希望对你有一点帮助。

关于python - 在 Python 中执行三重剪切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33716149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com