编辑:根据社区的反馈并重新阅读枚举文档,我现在意识到我正在返回一个索引和值而不是两个值,所以这对于我来说是有意义的。成为一个int。
我有这个字符串:
line1 ='ewtloYgcFQaJNhHVGxXDiQmzjfcpYbzxlWrVcqsmUbCunkfxZWDZjUZMiGqhRRiUvGmYmvnJIH EmbT'
我改成了一个清单:
line1_list = list(line1)
然后,我想检查彼此相邻的大写和小写字符,如下所示:
for i, j in enumerate(line1_list[:-1]):
if i.islower() and j.isupper():
print(i,j)
这会返回错误:
AttributeError: 'int' object has no attribute 'islower'
我不明白为什么说列表中的项目是整数,所以我这样做了:
>>> type(line1_list[0])
<type 'str'>
>>> type(line1_list[0]) == str()
False
我很困惑....
答案 0 :(得分:1)
在您的代码中,i
是索引,j
是实际字符。您可以在列表中循环
for i in range(0,len(line1)-1):
if line1[i].islower() and line1[i+1].isupper():
print(line1[i], line1[i+1])
答案 1 :(得分:1)
当迭代时,enumerate
返回你的集合的元组(索引,值),所以这里显然有些混乱。
另一个没有索引的好方法是使用zip
和切片,并覆盖上面跟随下面的情况,下面跟上面(在你的尝试中没有处理)
line1 ='ewtloYgcFQaJNhHVGxXDiQmzjfcpYbzxlWrVcqsmUbCunkfxZWDZjUZMiGqhRRiUvGmYmvnJIH EmbT'
for i, j in zip(line1[1:],line1):
if (i.islower() and j.isupper()) or (i.isupper() and j.islower()):
print(i,j)
(注意:不需要将字符串转换为列表,字符串可以按原样迭代)
除此之外:type(line1_list[0]) == str()
无效,因为str()
是空字符串,而不是字符串类。请改为isinstance(line1_list[0],str)
。
答案 2 :(得分:1)
如果要处理索引以及该索引处的元素,可以使用枚举函数。 在这种情况下,我将有索引,j将在该索引处具有元素。
你能做的是:
line1_list = list(line1)
i = 0
while(i < len(line1_list)-1):
if ((line1_list[i].islower() and line1_list[i+1].isupper()) or (line1_list[i].isupper() and line1_list[i+1].islower())):
print line1_list[i]
print line1_list[i+1]
i=i+1
希望这有帮助。