如何遍历字符串列表中的每个字符串并对其元素进行操作?

新手上路,请多包涵

给定一个列表:

 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

错误:

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

我将如何比较字符串列表的第一个和最后一个元素?

原文由 user3168141 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 520
2 个回答

尝试:

 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])

原文由 Steinar Lima 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

使用 enumerate() 实际上给你键/值对。使用 range(len()) 不会。

让我们先检查一下 range(len()) (从原始海报的例子开始):

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

这给了我们一个简单的列表:

 [0, 1, 2, 3, 4]

…并且此列表中的元素充当我们结果中的“索引”。

因此,让我们对我们的 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]

…实际上采用第一个列表(单词),并创建 第二个 简单列表,该列表的范围由第一个列表的长度指示。

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

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

enumerate () 代码:

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

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

所以我们打印相同的结果,但来源完全不同——而且处理方式也完全不同。

原文由 fra 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题