繁体   English   中英

向我解释.join()如何在Python中工作

[英]Explain to me how .join() works in Python

我创建了一个答案验证代码以用于故障排除程序。 我已经使用了明显的验证器来回答数字(使用try / except方法),但是现在我也有是/否的问题。 我搜寻了互联网并进行了堆栈交换,发现了一种从答案中删除所有整数的方法(不仅是答案边缘的整数,如.strip() )。 它使用join方法:

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”,则它将接受为“是”答案。 我想知道它是如何工作的,因为我必须对其进行解释,并且互联网上的所有.join()示例现在都不会使用它。

谁能帮我?

c for c in a if c.isalpha()

遍历a所有字符并仅产生字母而不是数字的c.isalpha() is True

''.join(['A', 'B', 'C'])

将字符列表连接到一个不带分隔符的字符串:

ABC

您有一个str.join()方法 此方法只是将可迭代参数(必须为字符串)中的所有值放到一个新字符串中,并将您在其上调用它的字符串对象作为连接符:

>>> ' - '.join(['foo', 'bar', 'baz'])
'foo - bar - baz'
>>> ', '.join(['spam', 'eggs', 'ham'])
'spam - eggs - ham'

在您的示例中,使用了字符串'' ,因此没有任何分隔要连接的字符串的方法:

>>> ''.join(['Py', 'thon'])
'Python'

该方法的输入是一个生成器表达式

(c for c in a if c.isalpha())

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

>>> '1'.isalpha()
False
>>> 'c'.isalpha()
True

所以''.join(c for c in a if c.isalpha())将字母c中的所有字符连接到一个新字符串中,从而有效地滤除了其他任何东西

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

.join()只需获取被调用的字符串(如果为'x'.join() ),则为'x' ),将其连接到作为参数获取的可迭代对象中的每个字符串,并将整个对象作为一个单独的返回串。

例如:

'*'.join(['1', '2'])
>>  '1*2'

在您的代码示例中,向传递给.join()的iterable中添加了条件语句,因此它将仅采用字母字符串。

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

您将列表理解插入该方法中。

https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

列表已构建,.join()方法将您构建的列表中的每个字符与分隔符(在您的情况下,没有'')连接在一起。

https://docs.python.org/2/library/string.html#string.join

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM