我是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
请让我知道,我将如何比较一个号码的第一个和最后一个元素。列表中的字符串。
提前致谢。
答案 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)