0

尝试检查字符串以进行逗号分隔。检查字符串后,我将使用它来帮助加载 SQL 数据库,这样字符串中的单词就不能用逗号以外的任何内容分隔。我确实有一种可行的方法,但对于 Python 来说似乎很笨拙。是否有更简洁/更便宜的方法来检查字符串以进行逗号分隔?

这是我在 Python 2.7.4 解释器中运行的尝试:

# List of possible Strings
comma_check_list = ['hello, world', 'hello world', 'hello,  world',\ 
                    'hello world, good, morning']

# Dictionary of punctuation that's not a comma
 punct_dict = {'@': True, '^': True, '!': True, ' ': True, '#': True, '%': True,\
               '$': True, '&': True, ')': True, '(': True, '+': True, '*': True,\ 
               '-': True, '=': True}

# Function to check the string
def string_check(comma_check_list, punct_dict):
    for string in comma_check_list:
        new_list = string.split(", ")
        if char_check(new_list, punct_dict) == False:
            print string, False
        else:
            print string, True

# Function to check each character
def char_check(new_list, punct_dict):
    for item in new_list:
        for char in item:
            if char in punct_dict:
                return False

# Usage
string_check(comma_check_list, punct_dict)

# Output
hello, world True
hello world False
hello,  world False
hello world, good, morning False

预先感谢您的帮助!

4

3 回答 3

3
for currentString in comma_check_list:
    if any(True for char in currentString if char in '@^! #%$&)(+*-="'):
        print currentString, False
    else:
        print currentString, True

@^! #%$&)(+*-="是您不希望它们出现在字符串中的字符。因此,如果 中的任何字符在currentString该列表中,我们将打印False.

于 2013-10-26T14:07:24.930 回答
2
于 2013-10-26T14:22:01.270 回答
2

我可能会将您的代码减少到以下内容。

# List of possible Strings
comma_check_list = ['hello, world', 'hello world', 'hello,  world', 'hello world, good, morning']

# Dictionary of punctuation that's not a comma
punct = set('@^! #%$&)(+*-="')

# Function to check the string
def string_check(comma_check_list, punct):
    for string in comma_check_list:
        new_list = string.split(", ")
        print string, not any(char in punct for item in new_list for char in item)

# Usage
string_check(comma_check_list, punct)

所做的更改。

  1. 使用 aset因为您只使用字典进行查找。
  2. 用过any
  3. 打印而不是if条件。

输出

In [6]: %run 
hello, world True
hello world False
hello,  world False
hello world, good, morning False
于 2013-10-26T14:12:46.067 回答