在python中:迭代列表中的每个字符串

时间:2014-01-07 10:07:12

标签: python string list

我是python的新手,我需要一些帮助。

任务:给出一个列表 - > words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']

我需要比较列表中每个字符串的第一个和最后一个元素, 如果字符串中的第一个和最后一个元素相同,则递增计数。

给定列表是:

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']

如果我手动尝试,我可以迭代列表中字符串的每个元素。

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
w1 = words[0]
print w1
aba

for i in w1:
   print i

a
b
a

if w1[0] == w1[len(w1) - 1]:
   c += 1
   print c

1

但是,当我尝试使用FOR循环迭代列表中所有字符串的所有元素时。

我收到了错误。

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
c = 0
for i in words:
     w1 = words[i]
     if w1[0] == w1[len(w1) - 1]:
       c += 1
     print c

ERROR:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: list indices must be integers, not str

请让我知道,我将如何比较一个号码的第一个和最后一个元素。列表中的字符串。

提前致谢。

8 个答案:

答案 0 :(得分:33)

尝试:

for word in words:
    if word[0] == word[-1]:
        c += 1
    print c

for word in words返回words的项目,而不是索引。如果您需要某个时间的索引,请尝试使用enumerate

for idx, word in enumerate(words):
    print idx, word

会输出

0, 'aba'
1, 'xyz'
etc.

上面-1中的word[-1]是Python说“最后一个元素”的方式。 word[-2]将为您提供倒数第二个元素,依此类推。

您也可以使用生成器实现此目的。

c = sum(1 for word in words if word[0] == word[-1])

答案 1 :(得分:1)

原因是在你的第二个例子中i是单词本身,而不是单词的索引。所以

for w1 in words:
     if w1[0] == w1[len(w1) - 1]:
       c += 1
     print c

相当于你的代码。

答案 2 :(得分:1)

使用range(len())相当于使用enumerate()的建议不正确。它们返回相同的结果,但它们相同。

使用enumerate()实际上会为您提供键/值对。使用range(len())不会。

首先检查range(len())(使用原始海报中的示例):

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
    print range(len(words))

这给了我们一个简单的清单:

[0, 1, 2, 3, 4]

...此列表中的元素用作&#34;索引&#34;在我们的结果中。

因此,让我们对enumerate()版本做同样的事情:

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']    
   print enumerate(words)

这当然没有给我们一个清单:

<enumerate object at 0x7f6be7f32c30>

...让我们将转换为列表,看看会发生什么:

print list(enumerate(words))

它给了我们:

[(0, 'aba'), (1, 'xyz'), (2, 'xgx'), (3, 'dssd'), (4, 'sdjh')]

这些是实际的键/值对。

所以这......

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']

for i in range(len(words)):
    print "words[{}] = ".format(i), words[i]

...实际上取第一个列表(Words),并创建一个 second ,这是由第一个列表的长度指示的范围的简单列表。

所以我们有两个简单的列表,我们只是从每个列表中打印一个元素,以获得我们所谓的&#34;键/值&#34;对

但它们并非真正的关键/价值对;它们只是同时印刷的两个单一元素,来自不同的列表。

enumerate ()代码:

for i, word in enumerate(words):
    print "words[{}] = {}".format(i, word)

...还会创建第二个列表。但该列表实际上一个键/值对的列表,我们要求来自单个源的每个键和值 - 而不是来自两个列表(就像我们上面做的那样)。

因此,我们打印相同的结果,但来源完全不同 - 并完全不同地处理。

答案 3 :(得分:1)

以下代码输出第一个和最后一个字母相等的单词数。使用python online compiler进行测试和验证:

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']  
count = 0  
for i in words:  
     if i[0]==i[-1]:
        count = count + 1  
print(count)  

输出:

$python main.py
3

答案 4 :(得分:0)

c=0
words = ['challa','reddy','challa']

for idx, word in enumerate(words):
    if idx==0:
        firstword=word
        print(firstword)
    elif idx == len(words)-1:
        lastword=word
        print(lastword)
        if firstword==lastword:
            c=c+1
            print(c)

答案 5 :(得分:0)

您要遍历单词中的槽项目,但必须遍历项目的长度:

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
c = 0
for i in range(len(words)):
    w1 = words[i]
    if w1[0] == w1[len(w1) - 1]:
      c += 1
    print (c)

在您的情况下,i [0]是'aba',因为我是根据单词中的项目计算得出的:

words = ['aba', 'xyz', 'xgx', 'dssd', 'sdjh']
c = 0
for i in words:
print(i)

输出为:

aba

答案 6 :(得分:-1)

改为使用range(),如下所示:

for i in range(len(words)):
    ...

答案 7 :(得分:-1)

for i,j in enumerate(words): # i---index of word----j
     #now you got index of your words (present in i)
     print(i)