Python 使单个字符串成为列表的一部分

Python 使单个字符串成为列表的一部分,python,Python,你能帮帮我吗。。我试图找到如何将单个字符串放入列表中 问题是这样的: 系统使用validate_users功能检查用户列表是否有效。有效用户的长度至少为3个字符。例如,['taylor'、'luisa'、'Jamal']都是有效用户。在本例中这样称呼它时,有些地方是不对的。你能想出解决办法吗 def validate_users(users): for user in users: if is_valid(user): print(user +

你能帮帮我吗。。我试图找到如何将单个字符串放入列表中

问题是这样的:

系统使用validate_users功能检查用户列表是否有效。有效用户的长度至少为3个字符。例如,['taylor'、'luisa'、'Jamal']都是有效用户。在本例中这样称呼它时,有些地方是不对的。你能想出解决办法吗

 def validate_users(users):
      for user in users:
        if is_valid(user):
          print(user + " is valid")
        else:
          print(user + " is invalid")
    
    validate_users("purplecat")
我试过了,但仍然没有得到正确的结果

purplecat is valid
purplecat is valid
结果应该是这样的,但仍然是这样

p is invalid
u is invalid
r is invalid
p is invalid
l is invalid
e is invalid
c is invalid
a is invalid
t is invalid

有人能解释一下吗?

您正在将“purplecat”作为字符串传递,因此当循环通过时,它会将字符串的每个元素视为一个要迭代的对象。尝试将其放入一个元素列表:


validate\u users(['purplecat'])

问题是您在此处迭代字符串:
用于users in users
用户==“purplecat”


尝试这样调用函数:
validate\u users([“purplecat”])

在本例中,您将字符串“purplecat”作为函数validate\u users的参数传递。因此,users=“purplecat”

在validate_users函数中,您使用for循环来迭代参数users。在python中,如果对字符串类型变量使用for循环,则for循环将迭代字符串中的所有字符

如果您希望获得“purplecat是有效的”这样的输出,那么您需要使用“validate_users([“purplecat”])”


在本例中,您将传递一个字符串列表,因此validate_用户中的for循环将迭代列表中的所有字符串(在本例中,由于列表只有1个元素,因此只迭代一次)。

正如其他人所指出的,如果您想创建一个包含字符串的单元素列表,您可以使用
[my_string]
其中
my_string
是字符串对象,例如
“purplecat”

如果在
users
参数中传递字符串,则有两种替代方法可以让函数更优雅地执行操作

一个选项是接受字符串作为列表的替代,如果
用户
变量还不是列表,则将其重新分配给一个元素列表:

def validate_users(users):
    if not isinstance(users, list):
        users = [users]
    # then carry on as before
另一种选择是以更可预测的方式失败:

def validate_users(users):
    if not isinstance(users, list):
        raise ValueError("users must be a list")
    # then carry on as before
然后,您可以编写函数的其余部分,而不必担心是否传递了列表以外的内容。在后一种情况下,它取决于调用者,以确保它传入一个列表或处理任何
ValueError


为简单起见,这里我不考虑元组,尽管您可能希望接受元组作为列表的替代,例如,而不是

    if not isinstance(users, list):
你本来可以的

    if not isinstance(users, (list, tuple)):
以下是您的输出:

我们可以在其范围内使用“[]”。希望它能起作用
并添加user的char长度,以确保它是否正确

这就是我想要解决的问题。它给出的线索只会使字符串成为列表的一部分。请尝试:
validate\u users([“purplecat”])
validate\u users()的用户参数应该是列表。否则,python将遍历字符串的每个字符,这几乎肯定不是您想要的。要查看此示例:
用于“exampleuser”中的用户:打印(用户)
与:
用于[“exampleuser”]中的用户:打印(用户)
是的,谢谢您提供的解决方案。我只为此堆积了将近20分钟。要使字符串成为列表的一部分,需要调用函数本身。虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高帖子的质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请您的回答添加解释,并说明哪些限制和假设适用。我怀疑这是否有帮助,甚至根本不起作用。请解释。因此,不鼓励仅使用代码的建议。高质量的回答包括解释您建议的关键部分如何/为什么解决OP的问题。大多数投票都是由未来的访问者从您的解决方案中学习一些可以应用于他们自己的编码问题的内容而获得的。考虑编辑来增加你的贡献价值。
purplecat is valid
def validate_users(users):
  for user in users:
    if is_valid(user):
      print(user + " is valid")
    else:
      print(user + " is invalid")

validate_users(["purplecat"])
def is_valid(user):
  if len(user) >=3 :
    return 1
  return 0

def validate_users(users):
    if is_valid(users):
      print(users + " is valid")
    else:
      print(users + " is invalid")

validate_users("purplecat")
def validate_users(users):   # takes list as parameter
  for user in users:         # iterates for users[0]: ["purplecat"]
    if is_valid(user):
      print(user + " is valid")
    else:
      print(user + " is invalid")

validate_users(["purplecat"]) # make this as a list
def validate_users(users):
  for user in [users]:
    if len(user) > 3:
      print(user + " is valid")
    else:
      print(user + " is invalid")

validate_users("purplecat")