Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python列表中的所有值必须用逗号分隔_Python_Python 2.7 - Fatal编程技术网

python列表中的所有值必须用逗号分隔

python列表中的所有值必须用逗号分隔,python,python-2.7,Python,Python 2.7,我想确保作为列表传递的参数具有不同的值和逗号分隔,否则会对任何其他分隔符(如制表符、空格、分号)抛出错误 案例1- input -> ['2015-01-01', '2015-02-01', '2015-02-01','2015-03-01'] output -> ['2015-01-01', '2015-02-01','2015-03-01'] 案例2- input -> ['2015-01-01';'2015-02-01';'2015-02-01';'2015-03-01

我想确保作为列表传递的参数具有不同的值和逗号分隔,否则会对任何其他分隔符(如制表符、空格、分号)抛出错误

案例1-

input -> ['2015-01-01', '2015-02-01', '2015-02-01','2015-03-01']
output -> ['2015-01-01', '2015-02-01','2015-03-01']
案例2-

input -> ['2015-01-01';'2015-02-01';'2015-02-01';'2015-03-01']
output -> raise exception - please enter comma separated list.

因为没有什么信息可以提供。 以下是一个简单的解决方案,我认为这是你想要问的问题:

l1 = []

while True:
    user_ = input("> ")

    if user_ == "exit":
        break

    if user_ in l1:
        print("already exists")
    if user_ not in l1:

        l1.append(user_)
        print(l1)


print(l1)
基本上,这将防止用户输入相同的东西两次。 您不必担心列表格式不正确。当用户输入时,python中的列表将始终使用逗号分隔

如果您希望确保用户以特定格式输入字符串,即日期格式yyyy/mm/dd。您只需添加另一个条件即可进行检查。
希望这能有所帮助。

类似的东西可以清理用户输入,但它总是有可能让人输入意想不到的东西

我会单独获取每个值,并将它们附加到一个列表中

inList = "['2015-01-01';'2015-02-01';'2015-02-01';'2015-03-01']"

delimiters = [",", ";", "\t", "\n", " "]
rem = ["[", "]", '"', "'", " "]
out = []
for delimiter in delimiters:
  if delimiter in inList:
    for r in rem:
      if delimiter == r :break
      inList = inList.replace(r, '')
    out = inList.split(delimiter)
    break

print(out)

我只是根据前面发布的评论和答案来假设预期结果和输入

import re
string_list = ["['2015-01-01';'2015-02-01';'2015-02-01';'2015-03-01']",
                      "['2015-01-01';'2015-02-01' '2015-02-01';'2015-03-01']",
                      "['2015-01-01';'2015-02-01'    '2015-02-01';'2015-03-01']",
                      "['2015-01-01','2015-02-01','2015-02-01','2015-03-01']"
                     ]
for i in string_list:
    if re.findall(r"\d{4}-\d{2}-\d{2}'[;*&\t\s]{1,}",i):
        print('invalid') # raise excpetion here
    else:
        print(set(i[1:-1].replace("'",'').split(',')))
输出:

invalid
invalid
invalid
set(['2015-03-01', '2015-01-01', '2015-02-01'])

有效的输出将是set类型,如果需要,可以使用
list()

将其转换为list。案例2的输入本身将抛出一个
SyntaxError:invalid syntax
您的意思是要将输入作为字符串处理吗?请发布解决问题的实际可执行代码。显示要向其传递参数的函数以及该参数的来源。是否尝试手动解析表示Python列表文字的字符串?为什么?这听起来像是一个故事。你到底想做什么?@sandy不,这个过程以一个包含列表文字的字符串作为输入;这是一个非常大而且非常重要的区别。这是我将使用的方法,这样可以保证在最后有一个列表,唯一的缺点是每个条目需要一次完成一个。
set([';'])。intersection(set(inList))
如果
str
在列表文本表达式的非分隔符部分包含分号,该怎么办?我认为您坚持使用
有点过于字面化,正如OP所说的“对于任何其他分隔符,如制表符、空格、分号等”,我的意思是,他们所寻找的基本上是一个模块,它总是返回正确的数据,或者如果是错误的数据,至少会引发异常。那太好了,我很想找到它。