我想在句子中找到单词的长度,并将结果作为列表列表返回。
类似
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)
我知道我在哪里搞砸了?
答案 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,如果您希望按预期看到输出,则可以获得map
个list
对象。
>>> 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]]