【问题标题】:Is there a way to divide a 2d list(list of lists) into 2 or more separate 1-dimensional lists with for loop? [closed]有没有办法用 for 循环将 2d 列表(列表列表)划分为 2 个或多个单独的 1 维列表? [关闭]
【发布时间】:2016-09-15 04:03:12
【问题描述】:

我有这个列表:

a = [[741.0, 743.0, 3386.0, 284577.0, 290611.0, 300889.0, 305256.0, 917458.0, 917905.0, 917906.0, 922187.0, 925852.0, 1260021.0, 1377096.0, 1524210.0, 1680657.0, 1692571.0, 1692645.0, 1692647.0, 1713958.0, 1801008.0, 1818975.0, 1858888.0, 1880544.0, 1880898.0, 1880899.0, 1880900.0, 1881062.0, 1881073.0, 1881240.0, 1881433.0, 1881434.0, 1881435.0, 1881436.0, 1881438.0, 1958358.0, 1958478.0, 1958479.0, 1958481.0, 1967310.0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

我想创建两个不同的一维列表:

b[0] = [741.0, 743.0, 3386.0, 284577.0, 290611.0, 300889.0, 305256.0, 917458.0, 917905.0, 917906.0, 922187.0, 925852.0, 1260021.0, 1377096.0, 1524210.0, 1680657.0, 1692571.0, 1692645.0, 1692647.0, 1713958.0, 1801008.0, 1818975.0, 1858888.0, 1880544.0, 1880898.0, 1880899.0, 1880900.0, 1881062.0, 1881073.0, 1881240.0, 1881433.0, 1881434.0, 1881435.0, 1881436.0, 1881438.0, 1958358.0, 1958478.0, 1958479.0, 1958481.0, 1967310.0]

b[1] = [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

使用 for 循环,如果我在 a 列表中有 3 个或更多列表,我可以执行相同操作...

【问题讨论】:

  • 你需要使用for循环吗?仅按索引引用嵌套列表可能更容易。例如a[0] = myOneDimensionalListOnea[1] = myOneDimensionalListTwo
  • 使用简单的解包b0, b1 = a
  • @Kasramvd 哇,我以为你只能用元组来做到这一点。整洁的!很高兴知道。
  • 你可以做到,不过这似乎不是一个好主意。 stackoverflow.com/questions/6181935/…

标签: python list for-loop 2d slice


【解决方案1】:

“我明白你在说什么......让我们假设我有一个列表列表......我如何制作一个列表列表,其中每个列表中的值之间存在差异?? - Thanos Smar 1小时以前”

如果列表被称为 a[0] 或 a 没有任何区别,您可以按照完全相同的方式执行此操作,只是您循环遍历 a[0][x] .. a[1][x] .. . 而不是 a[x] ... b[x] .... 将它们作为单独的列表并不容易,这是完全相同的事情。基本上你已经将它们作为单独的变量,它们只是被称为 a[0] ... a[1] 等等。

编辑 - 这将是一种方法:

>>> mylist = [[6, 6, 6], [1, 1, 1], [1, 2, 3]]
>>> mylist2 = list(mylist[0])
>>> for x in range(1, len(mylist)):
        for y in range(0, len(mylist[x])):
            mylist2[y] = mylist2[y] - mylist[x][y]


>>> mylist2
[4, 3, 2]
>>> 

使用 mylist2 = list(mylist[0]) 使其成为一个新列表,并且不会更改原始列表的值。


编辑 2:

应该就是这个了。

>>> myList = [[10, 5, 6, 7, 8], [9, 5, 6, 7, 8], [8, 5, 6, 7, 8]]
>>> myList2 = []
>>> for x in range(0, len(myList)):
        subList = []
        for y in range(0, len(myList[x])-1):
            subList.append(myList[x][0] - myList[x][y+1])
        myList2.append(subList)


>>> myList2
[[5, 4, 3, 2], [4, 3, 2, 1], [3, 2, 1, 0]]
>>> 

myList2 是一个列表列表,其中减去了 myList 中每个列表的第一个元素的值。如果不是这样,您应该能够轻松地对其进行修改以使其执行您想要的操作。


EDIT3:

好的,这就是你想要的。我敢肯定,一个真正优秀的程序员可以使用生成器或其他东西更优雅地做到这一点。我还没有深入研究,因为我几乎是这方面的初学者,但它确实有效。

myList = [[10, 5, 6, 7, 8], [9, 5, 6, 7, 8], [8, 5, 6, 7, 8]]
myList2 = []


for x in range(len(myList)):
        subList1 = [] 
        for y in range(len(myList[x])): 
            subList2 = [] 
            for z in range(len(myList[x])): 
                subList2.append(myList[x][y] - myList[x][z]) 
            subList1.append(subList2)
        myList2.append(subList1)

# - First loop goes through all lists in myList
# - Create an empty subList to append lists of subLists to
# - Second loop goes through all positions in list x of mylist
# - Create another empty subList2 to append the actual values to
# - Third loop does the same as loop 2.
# - Each value in myList from the second loop (y) gets - each value from myList
#        (including itself) from the third loop (z) and appended to a subList2
# - The subList2 is appended to subList1 creating a subList of subLists
# - Finally the list of subLists is appended to myList2 for each turn of the 
#        first loop

这将给出列表列表的结果列表:

myList2
[[[0, 5, 4, 3, 2], [-5, 0, -1, -2, -3], [-4, 1, 0, -1, -2], [-3, 2, 1, 0, -1], [-2, 3, 2, 1, 0]], 
 [[0, 4, 3, 2, 1], [-4, 0, -1, -2, -3], [-3, 1, 0, -1, -2], [-2, 2, 1, 0, -1], [-1, 3, 2, 1, 0]], 
 [[0, 3, 2, 1, 0], [-3, 0, -1, -2, -3], [-2, 1, 0, -1, -2], [-1, 2, 1, 0, -1], [0, 3, 2, 1, 0]]]

myList2[0][0] 包含 myList[0][0] 与 myList[0][x] 相比的所有值

myList[0][1] 包含 myList[0][1] 与 myList[0][x] 相比的所有值

等等……

如果您从一开始就更明确地说明您希望完成什么,我相信一位优秀的程序员也会回答您。我这样做是因为我需要练习。

【讨论】:

  • 我想在每个列表中的所有值之间添加减法...N = 2(列表的数量)...... ..................................................... ..........‌​.................................对于范围(N)内的 i: c.append([]) for j in range(R): c[i].append([]) for k in range(R): c[i][j].append(b[j] - b[ k]) print b...........R = 40,每个列表中的值的数量
  • 好的,如果你有 3 个列表,例如:a = [5, 5, 5, 5] b = [4, 3, 2, 1] c = [0, 1, 2 , 3] 你想要第四个列表,即:d = [(5-4-0), (5-3-1), (5-2-2), (5-1-3)] 即 d = [ 1, 1, 1, 1] 对吗?
  • @酒店的Kapten库贝尔如果我的列表为b = [[741.0,743.0,3386.0,917458.0,917905.0,917906.0,922187.0,925852.0,1692647.0,1713958.0,1801008.0,1818975.0,1858888.0,1880544.0,1880898.0,1880899.0 ,1880900.0,1881062.0,1881073.0,1881240.0,1881433.0,1881434.0,1881435.0,1881436.0,1881438.0,1958358.0,1958478.0,1958479.0,1958481.0,1967310.0],[0,3,0,0,0,0,0,0,0,0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],我想创建 ac[i ] 列表,以便它们之间的所有值之间具有 c[0] = 差异,例如。 741.0 - 743.0, 741.0 - 3386.0 等等 b[1] 也是
  • 我想我明白了,检查编辑。
  • 啊,我没听懂,但这并不难,而且可以用同样的方法完成。可以稍后查看。
【解决方案2】:

这真的没有任何意义。

您有一个列表列表(在您的情况下为a)。 然后你问如何使用for循环创建2个单独的列表,b[0]b[1],这已经可以通过直接访问a[0]a[1]来实现。

【讨论】:

  • 我需要这样做,因为我需要一维列表来创建列表中的每个值与列表中的每个其他值之间的差异列表......我不能换一种方式......
  • @ThanosSmar 我仍然不明白为什么将变量称为a[0]b[0]
  • 我明白你在说什么......让我们假设我有一个列表列表......我如何制作一个列表列表,其中每个列表中的值之间存在差异??
  • N = 2(a 拥有的列表数量)....................... ..................................................... .........................对于范围(N)中的 i:c.append([])对于范围(R)中的 j:c[ i].append([]) for k in range(R): c[i][j].append(b[j] - b[k]) print b...........R = 40,每个列表中的值数
猜你喜欢
  • 2016-07-24
  • 2014-10-13
  • 2013-12-14
  • 2018-11-15
  • 2023-02-08
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多