You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在列表推导式内完成排序?PySpark环境技术问询

问题解答

先修正你代码里的语法错误

你当前的创建列表代码存在对象调用错误,修正后正确写法如下:

# 创建列表
headers = [words.replace(' ', '_') for words in my_list]
numbers = [nums.split()[0] for nums in my_list]

# 排序
headers.sort(reverse=True)
numbers.sort(reverse=True)

能否在列表推导式内直接完成排序?

普通Python环境下

可以直接通过在外层嵌套sorted()函数实现一步完成处理和排序,不需要先创建列表再单独调用sort()方法:

  • 处理并排序headers:
    headers = sorted([words.replace(' ', '_') for words in my_list], reverse=True)
    
  • 处理并排序numbers:
    numbers = sorted([nums.split()[0] for nums in my_list], reverse=True)
    

这里sorted()会接收列表推导式的结果作为参数,直接返回一个已排序的新列表。

PySpark环境下的特殊处理

如果你的my_list是PySpark的RDD或DataFrame数据(而非本地Python列表),上述本地列表的处理方式不适用,需要使用PySpark原生API操作:

  1. 基于RDD处理:

    from pyspark import SparkContext
    sc = SparkContext.getOrCreate()
    
    rdd = sc.parallelize(my_list)
    # 处理并排序headers
    headers = rdd.map(lambda x: x.replace(' ', '_')).sortBy(lambda x: x, ascending=False).collect()
    # 处理并排序numbers(注意转成int避免字符串字典序排序)
    numbers = rdd.map(lambda x: int(x.split()[0])).sortBy(lambda x: x, ascending=False).collect()
    
  2. 基于DataFrame处理:

    from pyspark.sql import SparkSession
    from pyspark.sql.functions import split, col, regexp_replace
    
    spark = SparkSession.builder.getOrCreate()
    df = spark.createDataFrame([(item,) for item in my_list], ["value"])
    
    # 处理并获取排序后的headers
    headers = [row.header for row in df.select(
        regexp_replace(col("value"), " ", "_").alias("header")
    ).orderBy(col("header").desc()).collect()]
    
    # 处理并获取排序后的numbers
    numbers = [row.number for row in df.select(
        split(col("value"), " ")[0].cast("int").alias("number")
    ).orderBy(col("number").desc()).collect()]
    

内容的提问来源于stack exchange,提问作者pkpto39

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:33:19