向我解释.join()在Python中的工作原理

向我解释.join()在Python中的工作原理,python,validation,python-3.x,Python,Validation,Python 3.x,我已经创建了一个用于故障排除程序的答案验证代码。我已经使用了数字答案的明显验证器(使用try/except方法),但是我现在也有yes/no问题。我搜索了internet和堆栈交换,发现了一种从答案中删除任何整数的方法(而不仅仅是答案边缘的整数,如.strip())。它使用联接方法: while True: a = input("Yes or No? ").lower() a = ''.join(c for c in a if c.isalpha()) if a == "

我已经创建了一个用于故障排除程序的答案验证代码。我已经使用了数字答案的明显验证器(使用try/except方法),但是我现在也有yes/no问题。我搜索了internet和堆栈交换,发现了一种从答案中删除任何整数的方法(而不仅仅是答案边缘的整数,如
.strip()
)。它使用联接方法:

while True:
    a = input("Yes or No? ").lower()
    a = ''.join(c for c in a if c.isalpha())
    if a == "y" or a == "yes":
        print("You inputted Yes!")
        break
    elif a == "n" or a == "no":
        print("You inputted No!")
        break
    else:
        print("Please input a valid option!") 
因此,如果用户输入“Y312eS2”,那么它将接受“是”的回答。但是我想知道它是如何工作的,因为我必须解释它,而且internet上所有的
.join()
示例这次都不使用它

有人能帮我吗

c for c in a if c.isalpha()
迭代
a
中的所有字符,只生成字母字符而不是数字字符(
c.isalpha()为True

对于一个不带分隔符的字符串:

ABC
你有一个好主意。此方法只需将iterable参数(必须是字符串)中的所有值合并到一个新字符串中,并使用string对象将其称为joiner:

>>> ' - '.join(['foo', 'bar', 'baz'])
'foo - bar - baz'
>>> ', '.join(['spam', 'eggs', 'ham'])
'spam - eggs - ham'
在您的示例中,使用了空字符串
“”
,因此连接的字符串之间没有任何分隔:

>>> ''.join(['Py', 'thon'])
'Python'
该方法的输入为:

这只是将
a
中的所有字符传递给
str.join()
方法(如果它们是字母);然后仅返回true,而不返回数字、空格或任何其他类型的字符:

>>> '1'.isalpha()
False
>>> 'c'.isalpha()
True
因此,
'.join(如果c.isalpha()中的c代表c)
c
中的所有字母连接到一个新字符串中,有效地过滤掉任何其他字符。

.join()
它本身与从字符串中删除某些字符或验证任何内容无关

.join()
只需获取调用它的字符串(
'x'
对于
'x'.join()
),将它作为参数连接到iterable中的每个字符串,并将整个字符串作为单个字符串返回

例如:

'*'.join(['1', '2'])
>>  '1*2'
在代码中的示例中,向传递给
.join()
的iterable中添加了一条条件语句,因此它只接受字母字符串。

通常使用.join()方法将列表转换为字符串

您已将列表插入到该方法

该列表已生成,.join()方法将生成的列表中的每个字符与分隔字符(在您的示例中,无“”)连接起来


你的问题是什么?
join()
是如何工作的?这与使用
+
的字符串连接相同…谢谢,我理解它连接字符串,但不知道它在所有字符上循环,只返回字母字符,谢谢:))只是一个小提示,
isalpha()
对于整数字符串('1',2'等等)返回False,因此,语句
迭代a中的所有字符,只生成字母数字的字符
,应改为
迭代a中的所有字符,只生成字母的字符
。字母数字还有另一种方法,
.isalnum()
>>> '1'.isalpha()
False
>>> 'c'.isalpha()
True
'*'.join(['1', '2'])
>>  '1*2'