Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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中元组的2D数组_Python_Arrays_List_Sorting_Tuples - Fatal编程技术网

Python排序Python中元组的2D数组

Python排序Python中元组的2D数组,python,arrays,list,sorting,tuples,Python,Arrays,List,Sorting,Tuples,我是python新手,有一个数组,其中每个元素都是元组数组。我需要按照元组中的第一个元素对内部数组中的元组进行排序。我的数组如下所示: [[(u'10:30', u'11:20'), (u'08:30', u'09:20')], [(u'14:30', u'15:50'), (u'10:00', u'11:20'), (u'10:30', u'11:20'), (u'13:00', u'14:20')], [(u'10:30', u'11:20'), (u'08:30', u'09:20')],

我是python新手,有一个数组,其中每个元素都是元组数组。我需要按照元组中的第一个元素对内部数组中的元组进行排序。我的数组如下所示:

[[(u'10:30', u'11:20'), (u'08:30', u'09:20')], [(u'14:30', u'15:50'), (u'10:00', u'11:20'), (u'10:30', u'11:20'), (u'13:00', u'14:20')], [(u'10:30', u'11:20'), (u'08:30', u'09:20')], [(u'14:30', u'15:50'), (u'10:00', u'11:20'), (u'13:00', u'14:20')], [(u'10:30', u'11:20'), (u'08:30', u'09:20')]]
我试着做一些类似的事情

for index, elm in array:
    array[index] = sorted(elm, key=lambda x: x[0])
但是我得到了ValueError:需要超过0个值才能解包。不确定我的语法是不是关闭了什么的

预期的结果是

  [[ (u'08:30', u'09:20'), (u'10:30', u'11:20')], [ (u'10:00', u'11:20'), (u'10:30', u'11:20'), (u'13:00', u'14:20'), (u'14:30', u'15:50')], [(u'08:30', u'09:20'),(u'10:30', u'11:20') ], [ (u'10:00', u'11:20'), (u'13:00', u'14:20'), (u'14:30', u'15:50'),] [ (u'08:30', u'09:20'), (u'10:30', u'11:20')]]

当您对索引执行
操作时,数组中的elm:
,您是在对对象进行迭代。在第一次循环迭代中,
index
(u'10:30',u'11:20')
elm
(u'08:30',u'09:20')
,这不是您想要的(当我输入您发布的代码时,我得到
TypeError
,而不是
ValueError
)。您可以使用
enumerate()
函数获得您计划的内容:

for index, elm in enumerate(array):
    array[index] = sorted(elm, key=lambda x: x[0])

当您对索引执行
操作时,数组中的elm:
,您是在对对象进行迭代。在第一次循环迭代中,
index
(u'10:30',u'11:20')
elm
(u'08:30',u'09:20')
,这不是您想要的(当我输入您发布的代码时,我得到
TypeError
,而不是
ValueError
)。您可以使用
enumerate()
函数获得您计划的内容:

for index, elm in enumerate(array):
    array[index] = sorted(elm, key=lambda x: x[0])

缺少语句的

但是,如果您想对列表进行适当排序,则不需要使用索引。改用:


缺少
语句的

但是,如果您想对列表进行适当排序,则不需要使用索引。改用:


@6thSense,像
10:30
这样的字符串无法转换为
int
。很抱歉,现在没有看到实际数据。我有点怀疑它是否应该按照时间比正常字符串排序?它提供了正确的输出,但是这里的字符串比较足够吗?@6thsense,字符串是按照字典顺序排序的<代码>'10:30'
@6thSense:Normal(字典)字符串排序将正确排序这些时间字符串,因为它们是零填充的。如果我们有像
2:30
这样的时间,那么就会有问题,因为例如,
'2:30'>'10:30'
是真的。@PM2Ring-hmm是的,这很有意义:)。@6thsense,像
10:30
这样的字符串无法转换为
int
。很抱歉,现在没有看到实际数据。我有一点怀疑,它是否应该比普通字符串按时间排序?它提供了正确的输出,但是这里的字符串比较足够吗?@6thsense,字符串是按照字典顺序排序的<代码>'10:30'@6thSense:Normal(字典)字符串排序将正确排序这些时间字符串,因为它们是零填充的。如果我们有像
2:30
这样的时间,那么就会有问题,因为例如,
'2:30'>'10:30'
是真的。@PM2Ring-hmm是的,这很有意义:)。@6thsense-有一个前导零,所以这是不必要的。如果没有前导零,一个简单的
int()
调用就不足以解析这些时间字符串。添加带字符串格式的前导零会更容易。FWIW,在结果将替换原始列表时使用
sorted
函数不是很有效。这是因为
sorted
将源列表复制到新列表,并对新列表进行就地排序。因此,在这种情况下,直接使用
.sort()
方法执行就地排序要好得多。@6thsense-有一个前导零,所以这不是必需的。如果没有前导零,一个简单的
int()
调用就不足以解析这些时间字符串。添加带字符串格式的前导零会更容易。FWIW,在结果将替换原始列表时使用
sorted
函数不是很有效。这是因为
sorted
将源列表复制到新列表,并对新列表进行就地排序。因此,在这种情况下,最好直接使用
.sort()
方法执行就地排序。
for elm in array:                                                              
    elm.sort(key=lambda x: x[0])