Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改列表中包含的元组中第二个元素的值_Python_List_For Loop_Tuples - Fatal编程技术网

Python 更改列表中包含的元组中第二个元素的值

Python 更改列表中包含的元组中第二个元素的值,python,list,for-loop,tuples,Python,List,For Loop,Tuples,更改列表元组中某个元素的值时遇到问题 letterList = [('a', 0), ('b', 0), ('c', 0), ('d', 0), ('e', 0), ('f', 0), ('g', 0), ('h', 0), ('j', 0), ('k', 0), ('l', 0), ('m', 0), ('n', 0), ('o', 0), ('p', 0), ('q', 0), ('r', 0), ('s', 0), ('t', 0), ('u', 0), ('v', 0), ('w

更改列表元组中某个元素的值时遇到问题

 letterList = [('a', 0), ('b', 0), ('c', 0), ('d', 0), ('e', 0), ('f', 0), ('g', 0), ('h', 
 0), ('j', 0), ('k', 0), ('l', 0), ('m', 0), ('n', 0), ('o', 0), ('p', 0), ('q', 0), ('r',
 0), ('s', 0), ('t', 0), ('u', 0), ('v', 0), ('w', 0), ('x', 0), ('y', 0), ('z', 0)] 
 for m in message:
     letterList[m][0] += 1

当我使用它时,我得到一个错误,“列表索引必须是整数,而不是str”。谢谢你的帮助

元组是不可变的;你必须重建整个元组。但是,您没有映射,每次都必须搜索整个字母列表:

for m in message:
    letterList = [(l, c + 1 if m == c else c) for l, c in letterList]
这是非常低效的;否则无法找到匹配的元组。你最好用一本真正的字典

这就是循环中的代码(某种程度上)已经在尝试做的事情;将
信件列表
视为字典;将单个字符映射到计数。但列表仅以整数作为索引
0
是第一个值,
1
是第二个值,依此类推<但是,code>m是一个单字符字符串,这不是一个可接受的索引

您可以轻松地将
信函列表
转换为字典:

letterDict = dict(letterList)
然后增加值:

for m in message:
    letterDict[m] += 1
请注意,这里没有第二个索引

但是,在这种情况下,您确实希望在此处使用对象:

from collections import Counter

counts = Counter(message)

现在,
计数
包含了从
消息中的单个字符到它们的频率的映射,而无需您做任何工作。

元组是不可变的;你必须重建整个元组。但是,您没有映射,每次都必须搜索整个字母列表:

for m in message:
    letterList = [(l, c + 1 if m == c else c) for l, c in letterList]
这是非常低效的;否则无法找到匹配的元组。你最好用一本真正的字典

这就是循环中的代码(某种程度上)已经在尝试做的事情;将
信件列表
视为字典;将单个字符映射到计数。但列表仅以整数作为索引
0
是第一个值,
1
是第二个值,依此类推<但是,code>m
是一个单字符字符串,这不是一个可接受的索引

您可以轻松地将
信函列表
转换为字典:

letterDict = dict(letterList)
然后增加值:

for m in message:
    letterDict[m] += 1
请注意,这里没有第二个索引

但是,在这种情况下,您确实希望在此处使用对象:

from collections import Counter

counts = Counter(message)

现在,
计数
包含了从
消息
中的单个字符到它们的频率的映射,而您没有做任何工作。

什么是
消息
,您是否意识到元组是不可变的?消息只是一个字母字符串,正如您被告知的,字母不是有效的列表索引。列表索引是整数,以
0
开头。如果你想让例如
object['a']
起作用,
object
可能是最好的字典。如果你想让
object['a'][0]+=1
起作用,一个列表字典。@user3369239你能给我们看一下你的全部代码吗?什么是
message
,你意识到元组是不可变的吗?message只是一个字母字符串,正如你被告知的,字母不是有效的列表索引。列表索引是整数,以
0
开头。如果你想让例如
object['a']
起作用,
object
可能是最好的字典。如果您希望
object['a'][0]+=1
起作用,请提供一个列表字典。@user3369239能否向我们展示您的完整代码?