列表列表的Python函数

时间:2017-03-05 12:45:33

标签: python list function

我想在句子中找到单词的长度,并将结果作为列表列表返回。

类似

private void addView(Drawable d) {
    RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.MATCH_PARENT,     RelativeLayout.LayoutParams.MATCH_PARENT);
    ImageView iv = new ImageView(this);
    iv.setImageDrawable(d);
    iv.setAdjustViewBounds(true);
    iv.setScaleType(ImageView.ScaleType.MATRIX);
    iv.setLayoutParams(lparams);
    rl.addView(iv);
    iv.setOnTouchListener(this);
}

应该成为

lucky = ['shes up all night til the sun', 'shes up all night for the fun', 'hes up all night to get some', 'hes up all night to get lucky']

这是代码

[[4, 2, 3, 5, 3, 3, 3], [4, 2, 3, 5, 3, 3, 3], [3, 2, 3, 5, 2, 3, 4], [3, 2, 3, 5, 2, 3, 5]]

结果是最后一句话的结果,每个长度都在自己的列表中。

result =[]

def sentancewordlen(x)
    for i in x:
        splitlist = x.split(" ")
        temp=[]
        for y in splitlist:
                l = len(y)
                temp.append(l)
        result.append(temp)
sentancewordlen(lucky)

我知道我在哪里搞砸了?

3 个答案:

答案 0 :(得分:4)

我讨厌完全考虑这些不断变化的名单。更加pythonic的版本是列表推导:

result = [
    [len(word) for word in sentence.split(" ")]
    for sentence in sentences]

答案 1 :(得分:1)

更简洁的解决方案是:

lengths = [[len(w) for w in s.split()] for s in lucky]

输出:

[[4, 2, 3, 5, 3, 3, 3], [4, 2, 3, 5, 3, 3, 3], [3, 2, 3, 5, 2, 3, 4], [3, 2, 3, 5, 2, 3, 5]]

说明:

for s in lucky将遍历幸运的所有字符串。使用s.split(),我们会将每个字符串s拆分为由它组成的单词。然后,我们使用len(w)获取w中每个字s.split()的长度(字符数)。

答案 2 :(得分:0)

您问题中的

The comment会告诉您代码失败的原因。这是另一个利用map

的解决方案

Python 3,如果您希望按预期看到输出,则可以获得maplist对象。

>>> res = [list(map(len, x.split())) for x in lucky]
>>> res
[[4, 2, 3, 5, 3, 3, 3], [4, 2, 3, 5, 3, 3, 3], [3, 2, 3, 5, 2, 3, 4], [3, 2, 3, 5, 2, 3, 5]]

Python 2将为您提供调用map的列表:

>>> res = [map(len, x.split()) for x in lucky]
>>> res
[[4, 2, 3, 5, 3, 3, 3], [4, 2, 3, 5, 3, 3, 3], [3, 2, 3, 5, 2, 3, 4], [3, 2, 3, 5, 2, 3, 5]]