无法通过附加到列表理解创建的列表来在单个语句中创建元组
Unable to create a tuple in a single statement by appending to list created by list comprehension
目标:创建一个元组,该元组由 pandas 数据框的 headers 列和单个 easy-to-understand 语句中的附加列组成。
例如说:
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' object is not iterable
我也试过B(胡乱猜测)
mytuple = tuple([[x for x in df.columns].append(fname)])
但这给出了错误的结果
(None,)
我想知道三件事:
- 为什么选项 A 不符合我的预期。
- 有没有办法在一条语句中做到这一点 (non-obtusely)。
- 如果是,是怎么做到的?
list.append()
改变列表,但返回 None
。这就是你错误的原因。要将其写在一行中,请使用列表连接而不是 list.append()
:
mytuple = tuple([x for x in df.columns] + [fname])
因为 .append()
没有返回任何东西(它返回 None)。
这是这样做的:
print(tuple([x for x in df.colums] + [fname]))
或者如果 df.colums
已经是一个列表:
print(tuple(df.colums + [fname]))
您不需要先创建列表;只需使用参数解包运算符:
mytuple = (*df.columns, fname)
mytuple = tuple(list(df.columns) + [fname])
尽管 可能是最好的
目标:创建一个元组,该元组由 pandas 数据框的 headers 列和单个 easy-to-understand 语句中的附加列组成。
例如说:
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' object is not iterable
我也试过B(胡乱猜测)
mytuple = tuple([[x for x in df.columns].append(fname)])
但这给出了错误的结果
(None,)
我想知道三件事:
- 为什么选项 A 不符合我的预期。
- 有没有办法在一条语句中做到这一点 (non-obtusely)。
- 如果是,是怎么做到的?
list.append()
改变列表,但返回 None
。这就是你错误的原因。要将其写在一行中,请使用列表连接而不是 list.append()
:
mytuple = tuple([x for x in df.columns] + [fname])
因为 .append()
没有返回任何东西(它返回 None)。
这是这样做的:
print(tuple([x for x in df.colums] + [fname]))
或者如果 df.colums
已经是一个列表:
print(tuple(df.colums + [fname]))
您不需要先创建列表;只需使用参数解包运算符:
mytuple = (*df.columns, fname)
mytuple = tuple(list(df.columns) + [fname])
尽管