将带星号的表达式与变量一起使用

时间:2018-11-13 23:15:04

标签: python nltk tokenize

我打算在单词列表中剥离由"-"链接的单词。 我将使用加星标的表达式,因为我忽略是否会在列表中使用split()获得列表。

我在常量表达式上工作得很好:

[i for i in [*['1','2'],'1']]

产量:

['1', '2', '1']

我将使用变量获得相同的过程:

test=pd.DataFrame( {'columns0' :[['hanging', 'heart', 't-light', 'holder']]})
test.apply(lambda x : [e if len(e.split('-'))==1 else (*e.split('-')) for e in x ])

但是如您所料,它不起作用:

  File "<ipython-input-1109-dda6b3df14bb>", line 3
    test.apply(lambda x : [e if len(e.split('-'))==1 else ( *e.split('-')) for e in x ])
                                                           ^
SyntaxError: can't use starred expression here

2 个答案:

答案 0 :(得分:1)

为什么还要打扰那些情况呢? id name code attribute amount 1 AV 123 Alpha 233 2 TV 122 Beta 235 4 CD 122 Beta 239 5 TP 122 Beta 240 6 RX 123 Alpha 241 不管长度如何,都会以任何一种方式返回列表。只需嵌套理解即可:

split

答案 1 :(得分:0)

显然,答案是列表推导不支持splats。

PEP得出了抽象的说法:“该PEP在列表,集合和字典理解中不包括解包运算符,尽管尚未排除在以后的提议中。”

来源:https://www.python.org/dev/peps/pep-0448/#id6

在回答类似问题时,@ Curtis Lustmore解释说:“赋值运算符(及其上的所有变体)在Python中形成一个语句,而不是一个表达式。不幸的是,列表理解(和其他理解,例如set,词典和生成器)仅支持表达式”

来源:Unable to use *= python operator in list comprehension