使用分隔符将两个组中的列表元素组合在一起

时间:2016-11-12 16:39:08

标签: python list

我有一个单词列表及其含义:

wm = ['mendacious',
 'dishonest',
 'mendicant',
 'beggar',
 'meretricious',
 'gaudy; specious; falsely attractive',
 'mesmerize',
 'to hypnotize',
 'metamorphosis',
 'change; transformation']

每个词都有其含义。因此mendacious表示dishonestmendicant表示beggar,依此类推。具有多重含义的单词的含义由;分隔。例如' meretricious'有意义gaudy; specious; falsely attractive

我想要做的是组合词义对,这样我的最终列表就是这样:

['mendacious : dishonest','mendicant : beggar','meretricious : gaudy; specious; falsely attractive','mesmerize : to hypnotize', 'metamorphosis : change; transformation']

我该怎么做?

4 个答案:

答案 0 :(得分:1)

你需要成对地对列表进行迭代,并且通过zip同一个iter中的2个来实现这一点:

>>> i = iter(wm)
>>> [' : '.join(s) for s in zip(i, i)]
['mendacious : dishonest',
 'mendicant : beggar',
 'meretricious : gaudy; specious; falsely attractive',
 'mesmerize : to hypnotize',
 'metamorphosis : change; transformation']

答案 1 :(得分:1)

您可以使用以下代码创建元组列表:

tl = zip(wm[0::2], wm[1::2])

此列表如下所示:

[('mendacious', 'dishonest'), ('mendicant', 'beggar'), ('meretricious', 'gaudy; specious; falsely attractive'), ('mesmerize', 'to hypnotize'), ('metamorphosis', 'change; transformation')]

然后你可以迭代这个列表并连接每个元组。

#1

output = map(lambda t: t[0] + ':' + t[1], tl)

#2

output = [':'.join(t) for t in tl]

答案 2 :(得分:1)

一种pythonic方式:

res = ["%s : %s" % (wm[i], wm[i+1]) for i in range(0, len(wm), 2)]
print(res)

['mendacious : dishonest','mendicant : beggar','meretricious : gaudy; specious; falsely attractive','mesmerize : to hypnotize', 'metamorphosis : change; transformation']

答案 3 :(得分:1)

我的回答与AChampion的非常相似:

wm = [
    'mendacious',
    'dishonest',
    'mendicant',
    'beggar',
    'meretricious',
    'gaudy; specious; falsely attractive',
    'mesmerize',
    'to hypnotize',
    'metamorphosis',
    'change; transformation'
]

a = list(map(' : '.join, zip(*[iter(wm)] * 2)))
print(a)

这段代码可能有点神秘,所以我会尝试解释发生了什么。

iter(wm)wm创建iterator个对象。正如文档所说,这是

  

表示数据流的对象。反复拨打电话   迭代器的__next__()方法(或将其传递给内置函数   next())返回流中的连续项。

然后我们复制迭代器和zip它。这允许我们并行迭代迭代器对中的项。但是我们实际上没有两个独立的迭代器:我们有两个对一个迭代器对象的引用,所以我们得到的是wm中的连续项对。 FWIW,这项技术在How do you split a list into evenly sized chunks?中进行了讨论。

我们使用map' : '.join生成的每个字符串元组上调用zip方法。最后,我们使用listmap返回的可迭代转换为列表(在Python 2中,由于Python 2 map返回列表,因此不需要此步骤。)< / p>

我们可以使用相同的技术来生成字典而不是列表。字典对于这些数据来说是一个更有用的结构。

d = {k: v for k, v in zip(*[iter(wm)] * 2)}
print(d)

<强>输出

{'metamorphosis': 'change; transformation', 'mendicant': 'beggar', 'mendacious': 'dishonest', 'mesmerize': 'to hypnotize', 'meretricious': 'gaudy; specious; falsely attractive'}

我们可以将v字符串拆分成列表,这样可以更轻松地获取单个字词:

d = {k: v.split('; ') for k, v in zip(*[iter(wm)] * 2)}
print(d)

<强>输出

{'mendacious': ['dishonest'], 'mesmerize': ['to hypnotize'], 'meretricious': ['gaudy', 'specious', 'falsely attractive'], 'metamorphosis': ['change', 'transformation'], 'mendicant': ['beggar']}