【问题标题】:For loop not maintaining order through iterations (Python)For循环不通过迭代维护顺序(Python)
【发布时间】:2021-03-27 23:51:30
【问题描述】:

假设一个for循环应该总是maintain order通过迭代;但是,我在 python 中运行了一个 for 循环,它应该迭代一个包含 276 个元素(文本字符串)的列表,直到元素 139,结果与初始列表的顺序相同,但它们显然是随机排序。

有人知道为什么会这样吗?

编辑:

要循环的原始列表是使用以下代码从 pyspark 数据帧中获得的:

final_list = list(
df_redacted.select('id').toPandas()['id'])

for循环如下:(大部分导入都与我在循环内运行的函数有关)

from pyspark.sql import *
from pyspark.sql.functions import *
import time
from pyspark.sql.types import *
from IPython.display import display
import numpy as np
import pandas as pd
from pandas.tseries.frequencies import to_offset
from datetime import timedelta

results = []
for x in final_list: 
    aux = df_complete.filter("id = '%s'" % x) 
    final= function(aux,"value") 
    results.append(final)
result

【问题讨论】:

  • 你能提供例子吗
  • 除非您分享相关代码,否则我们无法为您提供帮助
  • 您构建列表的方式可能有问题。因此,请尝试构建一个包含问题的完整示例(尽可能简单),如果这不能让您自己发现解决方案,请编辑您的问题并添加代码。跨度>
  • @Mureinik 我觉得现在够了吗?
  • 我不知道 pyspark,但 SELECT 查询的结果通常原则上没有顺序。所以结果可能会以半随机的顺序进入列表。

标签: python pandas for-loop pyspark iteration


【解决方案1】:

for-look 以固定顺序迭代。必须发生的是select() 查询以不确定的顺序提供结果。您可以通过交互方式输入 python(或添加一些诊断代码)自己确认这一点,以从列表的不同部分打印“切片”值。

例如

from pprint import pprint

pprint(final_list[139:150])

执行几次,你会看到 for 循环只是打印了那里的内容。

【讨论】:

    猜你喜欢
    • 2023-02-23
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2012-06-27
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多