【问题标题】:Taking two lists as input that contain words, to form a tuple with two words, one from each list that have the same starting letter of each word将两个包含单词的列表作为输入,以形成一个包含两个单词的元组,每个列表中的一个单词的每个单词的首字母相同
【发布时间】:2019-07-17 20:31:02
【问题描述】:

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

我有一个解决方案,但是,我似乎不能两次生产相同的物品。这是我用文字表达的意思的一个例子。

名单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 重复。

【问题讨论】:

  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确说明问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您指定的问题。您发布的代码不可能产生您声称的输出,因为这些词不会出现在输入列表中。

标签: python python-3.x list tuples


【解决方案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')]

【讨论】:

  • 好的,谢谢,但是,如果不使用 itertools,您会知道有什么可能的方法来完成它吗?相当基本的代码,因为我一直遵循的教程建议我在深入了解之前不要使用它们。如果没有,我希望可以让它发挥作用。
【解决方案2】:

使用列表推导:

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')]

【讨论】:

  • 可以,非常感谢,感谢您的帮助。
【解决方案3】:

你可以试试这个

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

【讨论】:

  • 谢谢,amanb 在他的回答中证明了这一点,尽管为输入欢呼。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
相关资源
最近更新 更多