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]
给定一个有序列表中的两个元素,我想创建一个新列表,其中包含这些元素之间(包括)之间的所有内容。
如果第二点出现在列表中的第一点之前,就会出现问题。
右边是我现有的排序对象列表。 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]