我正在做一个练习,我们在其中制作两个列表,然后我们必须创建一个程序,该程序将返回一个列表,该列表仅包含列表之间通用的元素。
我把代码编写为 -
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',']']
为什么我得到这个输出?
答案 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的方式。简单的方法。
注意:这不会以有序的方式提供常用项目。但是你会得到所有常见的。