【问题标题】:Separating a list at a given index在给定索引处分隔列表
【发布时间】:2014-07-02 15:49:50
【问题描述】:

所以我有一个包含 6 个变量的列表。我想将其分成 2 个列表,一个包含给定变量左侧的元素,另一个包含给定变量右侧的所有元素。例如,如果我有:

var1 = 25
var2 = 30
var3 = 35
var4 = 40
var5 = 45
var6 = 50

arr = [var1,var2,var3,var4,var5,var6]

我想在 var 3 处分开,给出:

arr1 = [var1,var2]
arr2 = [var4,var5,var6]

这有点像在字符串上使用 split(var3)。我可以使用以下代码成功地做到这一点:

arrleft = arr[:arr.index(var3)]

arrreverse = sorted(arr, reverse=True)
arrcut = y[:y.index(var3)]
arrright = sorted(arrcut, reverse=False)

print arrleft
print arrright

但是,这似乎是一种糟糕的方法。有谁知道更简单的方法吗?

谢谢。

【问题讨论】:

  • 您也需要对结果列表进行排序吗?否则只需像您一样在index 处拆分输入。

标签: python arrays sorting


【解决方案1】:

这是怎么回事?

i = arr.index(var3)
left = arr[:i]
right = arr[i+1:]

【讨论】:

  • 啊,行得通!坦率地说,我只是不知道你能做到,呵呵
  • 我相信您会发现该结果中缺少元素i。对于所有我这样0 <= i < len(arr) 你可以断言arr[i:]+arr[:i] == arr
  • 这就是 OP 要求的!
【解决方案2】:

您应该对 arrright 使用与对 arrleft 相同的方法。

应该这样做:

index = arr.index(var3)
arrleft = arr[:index]
arrright = arr[index + 1:]

【讨论】:

  • 这不正是我刚才所说的吗? :)
  • 我没有看到你回答。时机不好:)
【解决方案3】:
arr = [25, 30, 35, 40, 45, 50]
arr1 = arr[:2]
arr2 = arr[2:]
print arr1, arr2

给出你想要的结果。但是,您实际上似乎想要一个值列表 var 3。这样做的一种方法(使用任意 35 作为限制而不是变量)是

arr.sort()
index = sum(1 for x in arr if x < 35)
arr1 = arr[:index]
arr2 = arr[index:]
print arr1, arr2

这样做的好处是限制不需要出现在列表中。如果你知道它,那么你可以使用

index = arr.find(35)

相反,因为在长列表上会更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多