首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将for-循环的值添加到数组中。

将for-循环的值添加到数组中。
EN

Stack Overflow用户
提问于 2018-08-20 14:05:11
回答 4查看 133关注 0票数 0

我试图将状态数组的值的长度放到单独的数组中,然后按降序排序,但是在迭代之后,我很难将字符串的所有长度值都放入数组中,而不是只有一个值。

代码语言:javascript
复制
states = ["Abia", "Adamawa", "Anambra", "Akwa Ibom", "Bauchi", "Bayelsa", "Benue", "Borno", "Cross River", "Delta", "Ebonyi", "Enugu", "Edo", "Ekiti", "Gombe", "Imo", "Jigawa", "Kaduna", "Kano", "Katsina", "Kebbi", "Kogi", "Kwara", "Lagos", "Nasarawa", "Niger", "Ogun", "Ondo", "Osun", "Oyo", "Plateau", "Rivers", "Sokoto", "Taraba", "Yobe", "Zamfara"]

for i in states:
    a = [len(i)]
    print(a)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-20 14:08:18

由于您希望将长度按降序排序,所以将sortedreverse=True和列表理解结合使用

代码语言:javascript
复制
states = ["Abia", "Adamawa", "Anambra", "Akwa Ibom", "Bauchi", "Bayelsa", "Benue", "Borno", "Cross River", "Delta", "Ebonyi", "Enugu", "Edo", "Ekiti", "Gombe", "Imo", "Jigawa", "Kaduna", "Kano", "Katsina", "Kebbi", "Kogi", "Kwara", "Lagos", "Nasarawa", "Niger", "Ogun", "Ondo", "Osun", "Oyo", "Plateau", "Rivers", "Sokoto", "Taraba", "Yobe", "Zamfara"]
a = sorted([len(i) for i in states], reverse=True)
print (a)

输出

代码语言:javascript
复制
[11, 9, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3]

为了在不诉诸NumPy数组的情况下获取排序列表的索引,有许多方法:see here。我个人更喜欢直接使用NumPyargsort。顾名思义,它按升序返回与排序数组/列表对应的索引数组。要获得降序索引,只需使用[::-1]反转argsort返回的数组。以下是解决问题的方法:

代码语言:javascript
复制
import numpy as np
states = ["Abia", "Adamawa", "Anambra", "Akwa Ibom", "Bauchi", "Bayelsa", "Benue", "Borno", "Cross River", "Delta", "Ebonyi", "Enugu", "Edo", "Ekiti", "Gombe", "Imo", "Jigawa", "Kaduna", "Kano", "Katsina", "Kebbi", "Kogi", "Kwara", "Lagos", "Nasarawa", "Niger", "Ogun", "Ondo", "Osun", "Oyo", "Plateau", "Rivers", "Sokoto", "Taraba", "Yobe", "Zamfara"]
a = [len(i) for i in states]
indices_sorted = np.argsort(a)[::-1] # [::-1] gives you indices for decreasing order

输出

代码语言:javascript
复制
array([ 8,  3, 24, 35, 19,  1,  2, 30,  5,  4, 10, 16, 17, 33, 32, 31, 22,
   13,  6,  7,  9, 11, 14, 25, 23, 20, 21, 26, 27, 34, 28, 18,  0, 12,
   15, 29])

现在您可以看到,上面输出的第一个索引是8,这意味着states的第9个元素是Cross River。类似地,您可以访问和验证其他元素。

票数 3
EN

Stack Overflow用户

发布于 2018-08-20 14:06:20

您可以使用列表理解:

代码语言:javascript
复制
lengths = [len(state) for state in states]

如果需要使用for循环,请创建一个列表并附加到其中:

代码语言:javascript
复制
lengths = []
for i in states:
    lengths.append(len(i))
票数 2
EN

Stack Overflow用户

发布于 2018-08-20 14:09:40

您也可以使用map函数来完成这一任务,而无需使用for循环:

代码语言:javascript
复制
a = list(map(len,states))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51932518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档