在包含列表的列表中排序

时间:2017-11-29 09:21:36

标签: python sorting

我已获得以下代码:

cases = []

for file in files:

    # Get value from files and write to data
    data = [ id, b, c, d, e, f, g, h, i, j, k ]

    # Append the values to the data list
    cases.append(data)

# Sort the cases descending
cases.sort(reverse=True)

运行for循环后,cases列表如下所示:

cases = [ ['id', val, val], ['id', val, val], ['id', val, val] ] etc.

id的价值类似于' 600' 900',' 1009'' 1009a'或者' 1010'我想要降序排序。

目前' 1009a'在列表的顶部,而我希望它在' 1009'之间。和' 1010'。这可能与' 1009a'被解析为unicode而其他值被解析为long。调试器也证实了这一点。

在编写id列表时,我尝试使用unicode(id)data字段转换为unicode,但这也没有给出所需的结果。排序cases后,输出将从' 999'开始,直到达到' 600'然后将从' 1130'开始然后跑到' 1000'。而不是从' 1130'开始然后跑到' 600'。这就是我想要的,用' 1009a'介于' 1009'和' 1010'。

2 个答案:

答案 0 :(得分:4)

如果您要比较包含数字的字符串,则按字母顺序排序,即不考虑该数字的位数。您必须先将这些转换为.header-unit { height: 80px; border: 2px solid #000; border-right: none; border-left: none; margin-top: 50px; position: relative; padding: 20px; } #video-container { position: absolute; } #video-container { top: 0%; left: 0%; height: 100%; width: 100%; overflow: hidden; /* additional */ display: flex; justify-content: center; align-items: center; flex-wrap: wrap; } #video-container p { position: absolute; z-index: 1; font-size: 50px; color: black; /* for the sake of demonstration */ /* additional */ margin: auto; } video { position: relative; z-index: 0; } video.fillWidth { width: 100%; },但使用<div class="header-unit"> <div id="video-container"> <p>Next Event: December 10th</p> <video autoplay loop class="fillWidth"> <source src="https://coverr.co/s3/mp4/Into_the_Wild.mp4"/> </video> </div> </div>后缀会很棘手。您可以使用正则表达式来分隔数字和后缀:

int

将此应用于您的示例,您可能需要这个(未经过测试):

a/b

答案 1 :(得分:0)

您的问题是,当您在unicode时,您与第一个值进行比较时确实有9>1,因此900>1000

您需要做的是为所有id字段编写前导零,以便900变为0900,现在小于1000。您可以使用这段代码执行此操作(尽管可能有更简洁的方法):

id = str(id).zfill(5)

请注意,如果str()已经是字符串,则您不需要id位。这里zfill(5)将在字符串的左边添加零,直到字符串的长度为5。