函数'conjunctions'消除了嵌套列表'word_list'。该列表包含多个子列表,每个子列表包含一个单词列表,例如:
[["Tom", "Laurel", "Merkel"], ["Jerry","Hardy", "Macron"]]
所有子列表中的单词数相同。该函数必须返回一个字符串列表,其中位置中的每个元素都是所有子列表中相同位置中的所有元素的“与”连接。
例如:
conjunctions([["Tom", "Laurel", "Merkel"],["Jerry","Hardy", "Macron"]]
应该返回
['Tom and Jerry', 'Laurel and Hardy', 'Merkel and Macron']
和
conjunctions([["one", "apples"],["two","oranges"],["three","bananas"]]
应该返回
['one and two and three', 'apples and oranges and bananas']
为此练习,我不得不添加不同的单词连词。 有没有更简单/更简洁的方法,您只能使用列表理解。
此外,我将如何使其变得更强大,例如允许输入各种长度的清单?(不过不要为收到答案而大惊小怪)
'''
def连词(word_list):
list1 = []
list2 = []
list3 = []
answer = []
if len(word_list) == 3:
for i in word_list:
#print(i[0])
list1.append((i[0]))
list2.append((i[1]))
answer.append(list1[0] + " and " + list1[1] + " and " + list1[2])
answer.append(list2[0] + " and " + list2[1] + " and " + list2[2])
elif len(word_list) ==2:
for i in word_list:
#print(i[2])
list1.append((i[0]))
list2.append((i[1]))
list3.append((i[2]))
answer.append(list1[0] + " and " + list1[1])
answer.append(list2[0] + " and " + list2[1])
answer.append(list3[0] + " and " + list3[1])
return answer
'''
输入:
conjunctions([["one", "apples"],["two","oranges"],["three","bananas"]])
conjunctions([["Tom", "Laurel", "Merkel"], ["Jerry","Hardy", "Macron"]])
输出:
['one and two and three', 'apples and oranges and bananas']
['Tom and Jerry', 'Laurel and Hardy', 'Merkel and Macron']
答案 0 :(得分:4)
def conjunctions(lst):
return list(' and '.join(words) for words in zip(*lst))
print(conjunctions([["Tom", "Laurel", "Merkel"],["Jerry","Hardy", "Macron"]]))
print(conjunctions([["one", "apples"],["two","oranges"],["three","bananas"]]))
输出
['Tom and Jerry', 'Laurel and Hardy', 'Merkel and Macron']
['one and two and three', 'apples and oranges and bananas']
答案 1 :(得分:1)
您可以执行以下操作:
twoDArray = [["one", "apples"],["two","oranges"], ["three","bananas"]]
answer = [0] * len(twoDArray[0])
for i, array in enumerate(twoDArray):
for j, value in enumerate(array):
if (answer[j] == 0):
answer[j] = value
else:
answer[j] = answer[j] + " and " + value
print(answer)
我们可以将一个空的answer
数组初始化为twoDArray
中第一个数组的长度。
answer = [0] * len(twoDArray[0])
现在,我们遍历twoDArray
和array
中每个数组中的值。
for i, array in enumerate(twoDArray):
for j, value in enumerate(array):
我们使用j
内部for循环的索引来确定我们要设置的answer
数组中的索引。
如果尚未设置索引j
上的值,我们要设置其value
。
否则,我们将附加到索引处存在的value
。
if (answer[j] == 0):
answer[j] = value
else:
answer[j] = answer[j] + " and " + value
答案 2 :(得分:0)
conjunctions = lambda L: list(map(lambda *names: ' and '.join(names), *L))
print(conjunctions([["one", "apples"],["two","oranges"],["three","bananas"]]))
输出
['one and two and three', 'apples and oranges and bananas']
答案 3 :(得分:0)
您可以四行(甚至更少)来完成它:
lst1 = [["Tom", "Laurel", "Merkel"],["Jerry","Hardy", "Macron"]]
lst2 = [["one", "apples"],["two","oranges"],["three","bananas"]]
def conjunctions(lst):
final_list = []
for idx,name in enumerate(lst[0]):
final_list.append(' and '.join([i[idx] for i in lst]))
return final_list
conjunctions(lst1)
的输出:
['Tom and Jerry', 'Laurel and Hardy', 'Merkel and Macron']