无法通过附加到列表理解创建的列表来在单个语句中创建元组

目标:在单个易于理解的语句中创建一个元组,该元组由 Pandas 数据框的列标题和一个附加列组成。

例如说:

df.columns = ['a', 'b', 'c']
fname = 'sample.txt'

我可以在三个语句中创建元组 ('a', 'b', 'c', 'sample.txt') 如下:

y = [x for x in df.columns]
y.append(fname)
mytuple = tuple(y)

它可读,但冗长。我可以将其简化为两个语句:

y = [x for x in df.columns].append(fname)
mytuple = tuple(y)

这还不错,但我仍然更喜欢在一行中完成。我的想法 A 是单行语句应该像这样工作:

mytuple = tuple([x for x in df.columns].append(fname))

唉,这会产生错误:

TypeError: 'NoneType' 对象不可迭代

我也试过 B(猜测)

mytuple = tuple([[x for x in df.columns].append(fname)])

但这给出了错误的结果

(没有任何,)

我想知道三件事:

  1. 为什么选项 A 不像我认为的那样工作。
  2. 有没有办法在单个语句中做到这一点(非迟钝地)。
  3. 如果是这样,它是如何完成的?

回答

您不需要先创建列表;只需使用参数解包运算符:

mytuple = (*df.columns, fname)


回答

list.append()改变列表,但正在返回None。这就是你的错误的原因。要将其写在一行中,请使用列表连接而不是list.append()

mytuple = tuple([x for x in df.columns] + [fname])


以上是无法通过附加到列表理解创建的列表来在单个语句中创建元组的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>