0

我的列表如下所示:

foo = ["neg * , This is a sentence","pos * , This is another sentence"]

我需要以这样一种方式拆分句子,使一个值成为类别,negpos,一个成为句子。我试过:

for text in foo:
    text = text.split("*")
    for a,b in text:
        cat=a
        text=b

但是我得到一个“太多的价值来解压”,有人知道吗?

4

5 回答 5

6

你的问题是你的循环结构很糟糕(这是可以原谅的,因为你对整个事情显然是新手)

试试这个更安全的方法(列表理解):

>>> foo = ["neg * , This is a sentence","pos * , This is another sentence"]
>>> [p.split('*', 1) for p in foo]
[['neg ', ' , This is a sentence'], ['pos ', ' , This is another sentence']]

现在你有一个[CAT, TEXT]项目列表。

>>> l = [p.split('*', 1) for p in foo]
>>> for cat, text in l:
    print 'cat: %s, text: %s' % (cat, text)

cat: neg , text:  , This is a sentence
cat: pos , text:  , This is another sentence
于 2013-07-17T15:14:07.450 回答
1

线路for a,b in text:不合适。更好的选择是a,b=text。前一个代码对一组对进行操作,后者对一个对进行操作。

应用该建议并消除冗余:

foo = ["neg * , This is a sentence","pos * , This is another sentence"]
for text in foo:
    a,b = text.split("*")
    # Now do something with 'a' and 'b'

如果您真的想重新使用该text变量,则可以使用:

for text in foo:
    a, text = text.split("*")
    # Now do something with 'a' and 'text'
于 2013-07-17T15:15:43.267 回答
1

您在内部循环中做错了分配部分。来,试试这个

lines = ["neg * , This is a sentence","pos * , This is another sentence"]
for line in lines:
    category, sentence = line.split("*", 1)
于 2013-07-17T15:26:20.790 回答
0

您在第二个循环中迭代字符串

for text in foo:
    text = text.split("*")
    a,b = text:

在这种情况下,您将 a 分配给文本的第一个元素,将 b 分配给第二个元素。否则,您会将字符串拆分为字符,并且您没有与字符数相同数量的变量

于 2013-07-17T15:14:12.933 回答
0
textList = []
catList = []
for str in foo:
    (cat,text) = str.split('*')
    textList.append(text)
    catList.append(cat)

然后textList是一个文本字符串catList列表,是一个猫字符串列表。否则,您将无法访问所有不同的猫和文本。

于 2013-07-17T15:18:34.010 回答