Python - 获取整个列表对象的最简单方法

3
l = [['John'],['rides'],['bike'],['with'],['Mr.','Brown'],]

假设我有一个列表对象。如何在不使用for语句且不将其附加到字符串的情况下,将我的列表对象逐行打印出来? 我想要的输出结果:
print("my sentence:" + ? )
print("people:" + ? + ", " + ?)

my sentence: John rides bike with Mr. Brown
people: John, Mr. Brown

重大编辑:

我创建这个问题的原因是基于文本的文档分析以及提取命名实体信息,而我的问题在于当我将“名字+姓氏”或“某某组织”的连续专有名词按照列表形式分组时,出现了一些困扰:

[[u'Milletvekili', u'Ay\u015fe'], [u'oraya'], [u'Merve', u'Han\u0131m'], [u'ile'], [u'gitti'], [u'.']]

我有一个算法,可以将列表对象与我的数据集进行比较,并描述实体类型。在if语句中判断[u'Milletvekili', u'Ay\u015fe']是人名;

if gettype(arr[i][0].split("'")[0]) == "Özel İsim":
      newarr.append("[Person: " + str(arr[i][0]) + "]")

我将其添加到我的新列表中,这将成为我的输出,如[Person:Mr. Brown]。但是我必须分组大写字母的单词,然后我总是有这样的输出:

 [Person: [u'Milletvekili', u'Ay\u015fe']] 
3个回答

4
并不像“sum”那样优雅,但是您可以使用str.join()map()functools.partial()进行替代:
>>> from functools import partial
>>> " ".join(map(partial(str.join, " "), l))
'John rides bike with Mr. Brown'

这也是我正在寻找的,但输出是[Person:[u'Mr。',u'Brown']],有什么想法为什么我不能连续打印对象? - Arda Nalbant
1
@ArdaNalbant 抱歉,很难说。目前不清楚您拥有什么输入数据以及您想要的输出是什么。您能否编辑问题并澄清一下?非常感谢。 - alecxe
我编辑了我的问题,但我担心它不太清楚,但我只能说我得到的是[Person: [u'Mr.', u'Brown']]而不是[Person: Mr.Brown]。 - Arda Nalbant

4

借鉴这个答案的内容:

" ".join(sum(l, []))
Out[130]: 'John rides bike with Mr. Brown'

2
非常优雅的解决方案! - MaxU - stand with Ukraine
我想要的功能是什么,但我该如何将其实现到我的两个打印函数中呢?我的意思是,当我想要打印John和Brown时,我不能以这种方式使用sum:print("people names:" + ",".join(sum(arr[0], arr[4])))。 - Arda Nalbant
当我尝试使用上面的代码时,由于使用了Unicode列表,我得到了一个类型错误:TypeError: can only concatenate list (not "unicode") to list。 - Arda Nalbant
你能否给出一个包含Unicode字符的列表的例子? - ayhan
刚刚编辑了问题,以免产生误解。 - Arda Nalbant
很抱歉,我不理解这个问题。您想要附加到 newarr 的内容是什么?您的示例是否为所期望的输出? - ayhan

3

将列表压平,然后使用' '进行连接。

>>> ' '.join(s for sub in l for s in sub)
'John rides bike with Mr. Brown'

或者使用 itertools.chain
>>> from itertools import chain
>>> ' '.join(chain(*l))
'John rides bike with Mr. Brown'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接