2017-07-17 215 views
0

我试图解决这个问题:如何将字符串列表转换为适当的列表?

写程序,需要两个列表,并返回包含第一个列表中的所有元素减去两个列表之间的所有共同元素的列表。

编码部分非常简单。那就是:

list1=input() 
list2=input() 

for i in list1: 
    if i in list2: 
    list1.remove(i) 
    else: 
    pass 

print(list1) 

,我在这里所面临的问题是,list1list2都是字符串。 以list1=‘[1,2,3,4]’。我需要将list1转换为[1,2,3,4]

我试过split()join()方法建议在How to convert list to string 但我失败了。

如何将'[1,2,3,4]'转换为[1,2,3,4]

+0

用于该用途的情况下,大概可以接受的:http://pythoncentral.io/cutting-and-slicing-strings-in-python/ – fdsa

+1

存在回答这[这里](https://stackoverflow.com/questions/1894269/convert-string-representation-of-list-to-list-in-python)。请在问一个新问题之前搜索你的问题。 –

+0

@ 9.0我很抱歉。我没有谷歌搜索的问题,但我找不到任何解决方案。我的坏 –

回答

2

你有两个选择,你可以加载它作为json

import json 
json.loads('[1,2,3,4]') 
# [1, 2, 3, 4] 

或者你可以评估与ast.literal_eval

from ast import literal_eval  
literal_eval('[1,2,3,4]') 
# [1, 2, 3, 4] 
+0

感谢您的答案!使用其中一种比另一种有好处吗? –

+1

'json.loads()'比ast.literal_eval()'(Py3.6)快得多。 – AChampion

+2

他们略有不同。除了刚才提到的表演侧面@AChampion。 json.loads版本对引号的限制较多,例如你不能在值附近引用单引号,因为json不接受单引号作为有效的引号字符。所以ast.literal_eval在这里可能会更普遍一些。 – Psidom

3

评估和演示使用ast模块,它是安全的字符串的字符串:

import ast 
ast.literal_eval('[1, 2, 3, 4]') 
=> [1, 2, 3, 4] 
+0

“安全”是什么意思?我不能使用比a​​st.literal_eval()快得多的json.loads()吗? –

+1

@AaryanDewan安全,而不是使用'eval()',这将是另一个(但不安全)的选项--eval()不会验证其输入(可能包含恶意代码),而literal_eval()会执行。有关详细信息,请参阅此[post](https://stackoverflow.com/questions/15197673/using-pythons-eval-vs-ast-literal-eval)。 –

-3

我会将它们转换为正确的在这种情况下,输入 你甚至需要使用逗号

list1=list(input()) 
list2=list(input()) 
+0

这会导致一个错误。我试过 –

+1

这不起作用,'input()'返回一个字符串,这个列表将包含字符串中的所有字符,而不仅仅是这些值。 ''“'”,“[”,“1”,“,”,...]“不是被查找的东西。 – AChampion

+0

什么样?我刚刚尝试过['1','2','3','4'],这是inpout 1234 – oToMaTiX

相关问题