【问题标题】:Python: Save a tuple in a listPython:将元组保存在列表中
【发布时间】:2022-01-17 14:57:47
【问题描述】:

从保存在 DataFrame 中的数据,我必须重新创建下面的格式(即 list(tuple(tuples))),所以它应该具有与以下相同的结构:

coord = [((9, 9), (10, 6), (11, 3),(12, 6))]

到目前为止,我已经能够通过以下代码从 DataFrame 创建元组:

coord_y = tuple(data_df['data'].iloc[i:])
coord_x = tuple(data_df['data'].index.values[i:])

coord = list(zip(coord_x, coord_y)) # stack into (x,y) coord

产生:

[(9, 9), (10, 6), (11, 3), (12, 6)]

这是错误的,因为它缺少“外部”元组,应该如下所示:

[((9, 9), (10, 6), (11, 3),(12, 6))]

我做错了什么?

【问题讨论】:

  • coord = [tuple(zip(coord_x, coord_y))] # stack into (x,y) coord
  • 你会得到一个整数元组列表,因为这就是你对list(zip(...))所做的。如果您希望 zip 的结果在一个元组中,请执行 tuple(zip()) 然后将其包含在一个列表中 [...]
  • @GennadyKandaurov 非常感谢 Gennady!那行得通。如果您作为答案回复,我很乐意接受并投票以供将来参考
  • 你能展示你的数据框吗?我认为就像df = pd.DataFrame({"data":[9,9,10,6,11,3,12,6]})

标签: python list dataframe tuples


【解决方案1】:

tuple() 创建一个包含所有数据的元组,而不是 list(),并用括号 [] 创建一个包含一个元素的新列表 - 早期创建的元组:

coord = [tuple(zip(coord_x, coord_y))] # stack into (x,y) coord

【讨论】:

    【解决方案2】:

    其中一个应该这样做:

    [(tuple(zip(coord_x, coord_y), ))]
    

    [(*zip(coord_x, coord_y), )]
    

    【讨论】:

      【解决方案3】:

      只需将您的 zip 包裹在一个元组中即可。

      coord_y = tuple(data_df['data'].iloc[int(time_steps[-1]-l-1):])
      coord_x = tuple(data_df['data'].index.values[int(time_steps[-1]-l-1):])
      
      coord = [tuple(zip(coord_x, coord_y))] # stack into (x,y) coord
      

      【讨论】:

      • 你试过了吗?它提供了与 OP 相同的东西,因为 list(sequence) 只是将序列转换为列表
      • 这样不行,变成:[(9, 9), (10, 6), (11, 3), (12, 6)]
      • 抱歉,我忘记了list() 会将可迭代对象转换为列表,如果您将其包装在[] 中,它应该可以工作。更正了代码。
      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 2016-05-17
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多