这些列表项是否是字符串?

时间:2017-03-22 13:57:19

标签: python

编辑:根据社区的反馈并重新阅读枚举文档,我现在意识到我正在返回一个索引和值而不是两个值,所以这对于我来说是有意义的。成为一个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

我很困惑....

3 个答案:

答案 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

希望这有帮助。