此列表重叠程序提供了奇怪的输出

时间:2017-06-22 06:42:50

标签: python python-3.x

我正在做一个练习,我们在其中制作两个列表,然后我们必须创建一个程序,该程序将返回一个列表,该列表仅包含列表之间通用的元素。

我把代码编写为 -

print('Please type in your list number 1')
list_1=input() 

print('Great! Please type in your list number 2 ')
list_2=input()

commonlist=[] # this will be the list containing common elements.


for i in range(len(list_1)):
    if list_1[i] in list_2:
        commonlist.append((list_1[i])) # this will put the common elements between the two lists in commonlist

print(commonlist)

现在,如果我的list_1[1,2,3,4,5]且我的list _2[3,4,5,6,7,8,9,那么预期的输出应为

  

[3,4,5]

但输出是

  

['[',',',',','3',',','4',',','5',']']

为什么我得到这个输出?

4 个答案:

答案 0 :(得分:2)

你得到那个奇怪的输出的原因是因为input()返回一个字符串。所以你在迭代字符串而不是列表。

您可以使用str.split()从输入中创建值列表来解决此问题:

print('Please type in your list number 1')
list_1=input().split()

print('Great! Please type in your list number 2 ')
list_2=input().split()

请注意,您的输入必须以空格分隔。

另外作为旁注,如果订单无关紧要,您可以在此使用set()

>>> a = [1, 2, 3, 4]
>>> b = [2, 6, 1, 8]
>>> 
>>> set(a) & set(b)
{1, 2}
>>>

答案 1 :(得分:1)

这是因为input()返回str个对象。因此,当您遍历字符串时,它将被视为字符列表。

如果要以发布的格式输入列表,则需要将其作为字符串,然后解析以获取整数列表。 split()类的str方法会有所帮助。如果需要,您需要指定分隔符。

答案 2 :(得分:1)

input()将输入的数据保存为字符串。您需要将该输入转换为列表。 您需要对程序进行一些更改。它看起来像这样:

print('Please type in your list number 1(separated by ",") ')
list_1=input().split(",") 

print('Great! Please type in your list number 2(separated by",")')
list_2=input().split(",") 

commonlist=[] # this will be the list containing common elements.


for i in range(len(list_1)):
    if list_1[i] in list_2:
        commonlist.append((list_1[i])) # this will put the common elements between the two lists in commonlist

print(commonlist)

请注意,列表输入应该有","两个数字之间。 例如: 23,45,67,54,67

答案 3 :(得分:1)

好的,我会尝试尽可能简单地解释它。

input() string>>> a=input() 5 >>> a+10 Traceback (most recent call last): File "<pyshell#15>", line 1, in <module> a+10 TypeError: Can't convert 'int' object to str implicitly 提供了任何内容。你需要根据自己的需要进行类型转换。

在你的python解释器中试试这个。

>>> a=input()
5
>>> int(a)+10
15
>>> 

为什么会抛出错误。这称为强类型语言。意思是python不允许你需要将它改成你想要的类型以获得你想要的东西。试试这个?

int()

现在它有效,因为我们添加了list(input())这是类型转换。现在在您的问题中,您只是将它们作为字符串并使用它们。

据说你必须使用>>> a '1 2 3 4' >>> list(a) ['1', ' ', '2', ' ', '3', ' ', '4'] 将它们更改为列表。即使这样,你的字符串中不需要的空格也会出现。

your_string.split()

在这种情况下使用split()。默认情况下,list()返回按空格分割的列表。您甚至可以指定要拆分的分隔符。所以这里不需要使用>>> a '1 2 3 4' >>> a.split() ['1', '2', '3', '4'] print('Please type in your list number 1') list_1=input().split() print(list_1) print('Great! Please type in your list number 2 ') list_2=input().split() print(list_2) commonlist=[] # this will be the list containing common elements. for i in range(len(list_1)): if list_1[i] in list_2: commonlist.append((list_1[i])) # this will put the common elements between the two lists in commonlist print(commonlist)

Please type in your list number 1
1 2 3 4
['1', '2', '3', '4']
Great! Please type in your list number 2 
2 3 5 6
['2', '3', '5', '6']
['2', '3']

输出:

print('Please type in your list number 1')
list_1=input().split() 

print('Great! Please type in your list number 2 ')
list_2=input().split() 

commonlist = set(list_1)&set(list_2)


print(list(commonlist))

看到你得到了你想要的东西虽然我建议这样找到列表中的常用元素。更简单。

<p><span><a href="/packages/symfony/symfony/stats" rel="nofollow">Installs</a>:</span>21 803 987</p>

commonlist = set(list_1)&amp; set(list_2)以一行结尾。这是python的方式。简单的方法。

注意:这不会以有序的方式提供常用项目。但是你会得到所有常见的。