以两个包含单词的列表作为输入,以形成包含两个单词的元组,每个列表中的一个单词的起始字母相同

时间:2019-07-17 20:31:02

标签: python python-3.x list tuples

我必须以两个包含单词的列表作为输入。使用这些单词,我使用两个单词组成一个元组,每个单词列表中的每个单词都包含相同的第一个字母。然后创建这些元组的列表并进行打印。

我有一个解决方案,但是,我似乎无法两次生产相同的产品。这是我用语言表达的一个例子。

列表A:['Jack', 'Tim', 'John', 'Ahmed']

列表B:['Julie', 'Tom', 'Henry', 'Harper']

c = input().lower()
d = input().lower()

a = c.split()
b = d.split()

x = []
for i in range(len(a)):
    if a[i][0] == b[i][0]:
        x.append((a[i], b[i]))

print(x)

我的输出:[('joy', 'juggle'), ('troy', 'trim')]

预期输出:[('Jack', 'Julie'), ('John', 'Julie'), ('Tim', 'Tom')]

我对语言学习还很陌生,并且无法找到与以前工作相似之处,无法找到如何在不产生相同输出的情况下通过a / b进行重复的工作。

3 个答案:

答案 0 :(得分:1)

使用itertools.product获取所有对,然后将其过滤掉:

In [1]: from itertools import product

In [2]: a =  ['Jack', 'Tim', 'John', 'Ahmed']

In [3]: b = ['Julie', 'Tom', 'Henry', 'Harper']

In [4]: out = [i for i in product(a, b) if i[0][0] == i[1][0]]

In [5]: out
Out[5]: [('Jack', 'Julie'), ('Tim', 'Tom'), ('John', 'Julie')]

答案 1 :(得分:1)

具有列表理解力:

In [50]: a = ['Jack', 'Tim', 'John', 'Ahmed']

In [51]: b = ['Julie', 'Tom', 'Henry', 'Harper']

In [55]: c = [(x,y) for x in a for y in b if x.lower()[0]==y.lower()[0]]

In [56]: c
Out[56]: [('Jack', 'Julie'), ('Tim', 'Tom'), ('John', 'Julie')]

答案 2 :(得分:0)

您可以尝试

[(x, y) for x in A for y in B if x[0] == y[0]]