我需要进行三重切割。我的函数作为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)
答案 0 :(得分:3)
可以通过切片来解决。
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]
究竟发生了什么:
N.B:在切片期间,第一个索引是包含的,第二个索引是独占的。
演示,
>>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.那是因为:
如果是切片, start 索引是包含在内的,但 end 索引是独占的。
如果我们想要从开始到索引4(27)的列表怎么办?做:
>> test_list[:5]
[1,28,3,4,27]
如果我们希望索引3结束?只需:
>>test_list[3:]
[4, 27, 5, 6, 7, 8]
希望能帮到你一点。
答案 1 :(得分:0)
由于你实际上并不需要知道哪个是哪个,你可以找到两个索引和切片。
def triple_cut(lst):
first, second = [i for i, e in enumerate(lst) if e in [27, 28]]
return lst[second+1:] + lst[first:second+1]+ lst[:first]