我有代码:
name = ['Jan', 'Bob', 'Sarah', 'Billy']
if name.startswith('B'):
name = 'B is for ' + name
我想改变Bob和Billy的名字来说'B代表Bob','B代表Billy',但我得到错误AttributeError:'list'对象没有属性'startwith'
我不能在for循环中执行它,因为它将名称转换为由新行分隔的简单字符串(我认为)。如果不使用for循环怎么办呢?
答案 0 :(得分:3)
您必须修改每个列表元素。例如:
names = ['Jan', 'Bob', 'Sarah', 'Billy']
for position, name in enumerate(names):
if name.startswith('B'):
names[position] = 'B is for ' + name
print(names)
将输出:
['Jan', 'B is for Bob', 'Sarah', 'B is for Billy']
答案 1 :(得分:1)
您可以使用列表理解:
>>> name = ['Jan', 'Bob', 'Sarah', 'Billy']
>>> name = ["B is for " + n if n.startswith("B") else n for n in name]
>>> name
['Jan', 'B is for Bob', 'Sarah', 'B is for Billy']
这可以缩短为适用于每个名字:
>>> name = ['Jan', 'Bob', 'Sarah', 'Billy']
>>> name = [n[0] + " is for " + n for n in name]
>>> name
['J is for Jan', 'B is for Bob', 'S is for Sarah', 'B is for Billy']
答案 2 :(得分:0)
首先,该功能被称为“startswith”,不确定您的问题或代码中是否只有拼写错误。
这里的问题是你试图在列表元素上调用一个不可能的字符串函数。你必须迭代列表,检查每个索引是否以“B”开头,然后更新该索引的名称列表。