代码之家  ›  专栏  ›  技术社区  ›  Rohit Mandiwal

如果列表同时包含数字和字符串,如何排序?

  •  0
  • Rohit Mandiwal  · 技术社区  · 5 年前

    在我的列表中,我混合了数字和字符串,不幸的是sort()不能处理它。有没有找过这个?

    请帮忙。

    myList = ['rohit', 'mandiwal', 32, 7701]

    TypeError: '<' not supported between instances of 'int' and 'str'

    3 回复  |  直到 5 年前
        1
  •  3
  •   DarrylG    5 年前

    使用排序键创建一个元组,该元组将字符串或数字放在第一位,而不必直接进行比较。

    方法:在每个元组中,数字的第一个元素为0,字符串的第二个元素为2。

    这样就不会比较数字和字符串,而是将数字放在第一位。可以通过使数字1和字符串0来反转。

    myList = ['rohit', 'mandiwal', 32, 7701, 3.5]
    result = sorted(myList, key = lambda x: (isinstance(x, str), x))
    print(result)
    

    简化钥匙,带@StefanPochmann提供的提示

    输出

    3.5, 32, 7701, 'mandiwal', 'rohit']
    
        2
  •  1
  •   Alexander    5 年前

    将列表转换为两个已排序的子列表,一个包含数字(整数和浮点数),另一个包含其他所有内容。返回合并结果。

    myList = ['rohit', 'mandiwal', 32, 7701, 3.5]
    result = (
        sorted(n for n in myList if isinstance(n, (int, float))) 
        + sorted(word for word in myList if not isinstance(word, (int, float)))
    )
    >>> result
    [3.5, 32, 7701, 'mandiwal', 'rohit']
    
        3
  •  1
  •   Venkatesh-Prasad Ranganath    5 年前

    如果希望通过将每个元素作为字符串按字母顺序排列列表,请使用 sorted(myList, key=str) . 基本思想是使用 钥匙 函数将每个列表元素转换为一个值,该值的类型支持比较,而转换启用所需的排序顺序。