'int'对象在列表上不可迭代

时间:2019-07-25 09:39:55

标签: python arrays python-3.x list

给出两个都具有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

6 个答案:

答案 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)

  • reversed(seq)-Python的内置函数,它返回一个反向迭代器。
  • strip()-Python的内置函数用于删除字符串中的所有前导和尾随空格。

例如。

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)