Python - 在有序列表中的两个元素之间创建一个新的子列表

Python - Create a new sublist between two elements in an ordered list

给定一个有序列表中的两个元素,我想创建一个新列表,其中包含这些元素之间(包括)之间的所有内容。 如果第二点出现在列表中的第一点之前,就会出现问题。 右边是我现有的排序对象列表。 rt 是开始边界,rb 是结束边界。 new_right = right[right.index(rt): right.index(rb) + 1]

情况外,此代码段有效

right = [a, rb, c, rt, d, e]

我在哪里得到 [rt, d, e] 而不是包装的 [rt, d, e, a, rb]

有没有办法不用创建复杂的方法就可以做到这一点?其他人的一些问题是通过列表理解解决的。仔细研究,我得出

begin = right.index(rt)
end = right.index(rb)
if end > begin:
    new_right = right[begin: end + 1]
else:
    new_right = [right[i % r_len] for i in range(begin, r_len + end + 1)]

这在我看来很丑陋,但似乎经得起我的考验。 有更好的方法吗?

编辑: 对此有两种可行的解决方案。

rbegin = right.index(rt)
rend = right.index(rb)
if rend >= rbegin:
    new_right = right[rbegin: rend + 1]
else:
    new_right = [right[i % r_len] for i in range(rbegin, r_len + rend + 1)]

与以下相比复杂得令人发指:

if rend > rbegin:
    new_right = right[rbegin: rend + 1]
else:
    new_right = right[rbegin:] + right[:rend + 1]

像这样简单地翻转切片就可以匹配您的测试:

begin = right.index(rt)
end = right.index(rb)
if end > begin:
    new_right = right[begin: end + 1]
else:
    new_right = right[end: begin + 1]

也许是这个?

new_right = right[begin: end + 1] if end > begin else right[begin:] + right[:end + 1]

您可以添加尾部和前导切片,而不是使用理解。使用您的代码结构:

begin = right.index(rt)
end = right.index(rb)
if end > begin:
    new_right = right[begin: end + 1]
else:
    new_right = right[begin:] + right[:end + 1]