给出两个都具有String元素的列表,并根据以下规则使用python列表编写一个python程序来创建新字符串:
应该将list1中的第一个元素与list2中的最后一个元素合并,将list1中的第二个元素与list2中的第二个最后一个元素合并,依此类推。 如果list1 / list2中的元素为None,则另一个列表中的相应元素应保留在合并列表中。
样本输入:
list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
预期输出:
“每天有一个苹果让医生远离我”
我的代码:
for i,j in range(n,len(list1)):
a = 1
j = n - a
s = list[i]+list[j]
resultant_data.append(s)
a=+1
n+=1
return resultant_data
#Provide different values for the variables and test your program
list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
merged_data=merge_list(list1,list2)
print(merged_data)
Traceback (most recent call last): line 21, in <module> merged_data=merge_list(list1,list2) line 8, in merge_list for i,j in range(n,len(list1)): TypeError: 'int' object is not iterable
答案 0 :(得分:1)
list
是保留关键字,我认为这应该是正确的代码段。
for i,j in range(n,len(list1)):
a = 1
j = n - a
s = list1[i]+list2[j]
resultant_data.append(s)
a=+1
n+=1
答案 1 :(得分:1)
如果要在两个列表上进行迭代,则可以使用Python的内置函数:
words = []
for elt0, elt1 in zip(list1, reversed(list2)):
w = elt0
if elt1:
w += elt1
words.append(s)
return " ".join(words)
答案 2 :(得分:1)
or
运算符非常适合将None
合并为一个空字符串。 map
用于将函数应用于两个列表。 lambda
用于在线创建简单函数,join
用于合并由空格分隔的元素。
list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
print(' '.join(map(lambda x, y: (x or '')+(y or ''),list1, list2[::-1])))
An apple a day keeps the doctor away
答案 3 :(得分:1)
您遍历2个索引,因此需要2个范围(可迭代对象)。
类似:
def merge_list(list1, list2):
resultant_data = []
list2.reverse()
for i,j in zip(range(0, len(list1)), range(0, len(list2))):
if list2[j] is not None:
s = list1[i]+list2[j]
else:
s = list1[i]
resultant_data.append(str(s))
return ' '.join(resultant_data)
#Provide different values for the variables and test your program
list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
merged_data=merge_list(list1,list2)
print(merged_data)
另请参阅https://discuss.codecademy.com/t/loop-two-variables-simultaneously-in-python-3/261808/7
我还删除了list2索引的计算,如果您只是反转列表开头,则可以像使用list1一样循环遍历
还有一些改进的余地,例如如果list1也包含None值,则需要额外的检查...
评论后的更多信息: 在python3中,范围函数返回范围对象而不是列表(python2)(cfr。Python 3 range Vs Python 2 range) 但是,当您将其用于迭代时,这没有什么不同:
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
>>> list1=['a','b']
>>> range(0, len(list1))
range(0, 2)
>>> for i in range(0, len(list1)):
... print(list1[i])
...
a
b
我在上面输入的代码在python3中给出了相同的错误TypeError: 'int' object is not iterable
问题是您要迭代2件事,并且只提供1个可迭代项 cfr。 object not iterable on treehouse 并且在这种情况下,第二个Iterable不提供。
为什么假设未提供的第二个可迭代对象是我不确定的int,但我想它会认为(请参见下面的示例) 0 是首先要迭代并 1 是要迭代的第二件事,0和1是整数,因此不可迭代。
>>> for i,j in [0,1]:
... print i
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> for i,j in [0,1],:
... print i
...
0
答案 4 :(得分:0)
例如。
list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
string1 = ""
for a1,a2 in zip(list1,reversed(list2)):
if a2 is not None:
string1 = string1+" "+a1+a2
else:
string1 = string1+" "+a1
print(string1.strip())
O / P:
An apple a day keeps the doctor away
答案 5 :(得分:-1)
您收到了该错误,因为None并非字符串,因为它不包含诸如“ None”这样的引号。这就是为什么它被认为是整数。因此,不能将整数和字符串连接在一起。为了避免错误,在连接前需要一个if条件,该条件检查该索引是否为None。
list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
j = -1
sentence = ""
for i in list1:
if list2[j] != None:
word = i + list2[j]
j-=1
sentence = sentence + word + " "
print(sentence)