Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有可用库函数的情况下将列转换为行(Python)_Python_Sorting - Fatal编程技术网

如何在没有可用库函数的情况下将列转换为行(Python)

如何在没有可用库函数的情况下将列转换为行(Python),python,sorting,Python,Sorting,所以我有这个,它只在列数(我的子列表中的元素数)等于我想要创建的行数时才起作用 list1 = [[2, 1, 2, 6],[1, 5, 4, 9],[4, 2, 3, 2],[1, 4, 5, 7] for i in range(len(list1)): columns.append([row[i] for row in list1]) 我试着让它通用,这意味着它将接受列表长度和子列表长度的任意组合(例如[1,2,3,4,5],[2,3,4,5,6]),但我得到的错误是没有定义j

所以我有这个,它只在列数(我的子列表中的元素数)等于我想要创建的行数时才起作用

list1 = [[2, 1, 2, 6],[1, 5, 4, 9],[4, 2, 3, 2],[1, 4, 5, 7]

for i in range(len(list1)):
    columns.append([row[i] for row in list1])
我试着让它通用,这意味着它将接受列表长度和子列表长度的任意组合(例如[1,2,3,4,5],[2,3,4,5,6]),但我得到的错误是没有定义j

for i,j in range(len(list1[i][j])):
    columns.append([row[i] for row in list1])
我怎样才能改变它,使它工作?
我的列表必须是一个NxM矩阵,我不能使用任何快捷方式,如min、max、zip等。

这将起作用。主要思想是在适当的时间创建一个空的结果列表和空的子列表,并附加到它们。请注意,输入矩阵具有大小
m x n
m
行和
n
列,这是表示矩阵大小的标准方式。结果具有大小
nxm
。如果您愿意,您可以交换
m
n
名称以与您的课程或书籍相对应

m, n = len(list1), len(list1[0])
result = []
for col in range(n):
    result.append([])
    for row in range(m):
        result[col].append(list1[row][col])
如果您不喜欢临时空列表或附录,Python以外的语言中经常使用的另一种方法是创建适当大小的临时结果矩阵,然后填写正确的条目,如下所示:

m, n = len(list1), len(list1[0])
result = [[None] * m for col in range(n)]
for col in range(n):
    for row in range(m):
        result[col][row] = list1[row][col]
此外,还有更简短但更难理解的列表理解:

[[list1[row][col] for row in range(len(list1))] for col in range(len(list1[0]))]
尽管如此,Python中更好的方法是

result = list(map(list, (zip(*list1))))

(最后包括@c的更正。)ᴏʟᴅsᴘᴇᴇᴅ.)

这将起作用。主要思想是在适当的时间创建一个空的所有结果列表和空的子列表并附加到它们。请注意,输入矩阵有大小
mxn
m
行和
n
列,这是表示矩阵大小的标准方式。结果有大小
nxm
。您可以交换
m
n
名称与您的课程或书籍相对应,如果您愿意的话

m, n = len(list1), len(list1[0])
result = []
for col in range(n):
    result.append([])
    for row in range(m):
        result[col].append(list1[row][col])
如果您不喜欢临时空列表或附录,Python以外的语言中经常使用的另一种方法是创建适当大小的临时结果矩阵,然后填写正确的条目,如下所示:

m, n = len(list1), len(list1[0])
result = [[None] * m for col in range(n)]
for col in range(n):
    for row in range(m):
        result[col][row] = list1[row][col]
此外,还有更简短但更难理解的列表理解:

[[list1[row][col] for row in range(len(list1))] for col in range(len(list1[0]))]
尽管如此,Python中更好的方法是

result = list(map(list, (zip(*list1))))

(最后包括@c的更正。)ᴏʟᴅsᴘᴇᴇᴅ.)

你这是什么意思:它不起作用…(但我从未被定义,它仍然起作用)?它只对i有效,但当我添加了一个j时,它就不起作用了。我想使它更通用,这意味着代码将接受任何长度列表和子列表,这就是为什么我试图用j引用子列表中的项数,所以我想找到一种方法来解决这个问题。您的两个代码段都不起作用。您有未定义的
i
columns
第二个代码段变量
j
被添加到undefined中。这就是问题所在……它只与i一起工作。在我的变量表中,列表“columns”正确填充。那么你知道我如何正确定义它吗?好吧,我错误地复制了它,现在我的代码中是如何使用它的。你知道吗你的意思是:它不起作用…(但我从未被定义,它仍然起作用)?它只对i有效,但当我添加了一个j时,它就不起作用了。我想使它更通用,这意味着代码将接受任何长度列表和子列表,这就是为什么我试图用j引用子列表中的项数,所以我想找到一种方法来解决这个问题。您的两个代码段都不起作用。您有未定义的
i
,第二个代码段变量
j
被添加到未定义中。这就是问题所在……它只与i一起工作。在我的变量表中,列表“列”正确填充。那么你知道我如何正确定义它吗?好吧,我错误地复制了它,现在是我如何在代码中使用它,这才有效。
列表(映射(列表,(zip(*l)))
,如果您希望内部项目也是列表。@cᴏʟᴅsᴘᴇᴇᴅ: 是的,你是对的,我的
zip
ped版本将内部项设置为元组。我要更正我的答案还是让人们看到你的更正?哇,你们真的很喜欢互相拍拍对方的背。听着,我明白zip更容易,我在问题中提到过。你认为我会因为那样的乐趣而伤害自己吗?(不要回答这个)@SylviaH:我正在努力提高我的礼貌,同时保持诚实,但有时我会偏离某个方向。这个网站旨在保留好的问题和答案供将来参考,所以我认为最好让其他读者了解
zip
解决方案,即使你已经知道这个解决方案。我明白了lution第一次就错了,这表明它不是很明显。我有点急躁,因为我的问题被否决了。考虑到我找不到任何其他没有提到“zip”的问题,我认为这是一个真正好的问题。回想起来,我意识到我花了几次编辑才弄清楚我在问什么。Al所以,当所有的工作都可以在一行中完成时,这看起来像是倒退。我想我的老师是在强迫我们多思考一点。
list(map(list,(zip(*l)))
,如果你想让里面的项目也成为列表的话。@cᴏʟᴅsᴘᴇᴇᴅ: 是的,你是对的,我的
zip
ped版本将内部项设置为元组。我要更正我的答案还是让人们看到你的更正?哇,你们真的很喜欢互相拍拍对方的背。听着,我明白zip更容易,我在问题中提到过。你认为我会因为那样的乐趣而伤害自己吗?(不要回答这个)@SylviaH:我正在努力提高我的礼貌,同时保持诚实,但有时我会偏离某个方向。这个网站旨在保留好的问题和答案供将来参考,所以我认为最好让其他读者了解
zip
解决方案,即使你已经知道这个解决方案。我明白了解错