0

我是一个新的 Python 程序员,正在尝试一些东西。我想创建一个字符串列表并循环遍历我的列表以检查每个元素的大小,如果大小大于 5,那么我将该字符串更改为大写字符串。我被困在如何访问该元素上。下面是我写的一些代码。先感谢您!

lis = ['heeeeellllooo','world','low','higggghhh']
for elem in list:
  if len(lis[elem]) > 5:
    list[elem].upper()
4

3 回答 3

5

list comprehension与 一起使用ternary operator

In [16]: lis = ['heeeeellllooo','world','low','higggghhh']

In [17]: [x.upper() if len(x)>5 else x for x in lis] # this is a new list

Out[17]: ['HEEEEELLLLOOO', 'world', 'low', 'HIGGGGHHH']

您也可以使用enumerate(),enumerate返回一个tuple完整的第一项是元素的索引,第二项是元素本身。

此方法修改原始列表。

In [18]: for index,elem in enumerate(lis):
   ....:     if len(elem)>5:
   ....:         lis[index]=elem.upper()  #access element by index
   ....:         

In [19]: lis
Out[19]: ['HEEEEELLLLOOO', 'world', 'low', 'HIGGGGHHH']

列表是如何实现的?

Python 的列表实际上是可变长度数组,而不是 Lisp 样式的链表。该实现使用对其他对象的连续引用数组,并将指向该数组的指针和数组的长度保存在列表头结构中。

这使得索引列表 a[i] 成为一种操作,其成本与列表的大小或索引的值无关。

当添加或插入项目时,引用数组的大小会调整。应用了一些巧妙的方法来提高重复追加项目的性能;当数组必须增长时,会分配一些额外的空间,因此接下来的几次不需要实际调整大小。

于 2013-01-10T00:21:56.783 回答
3

enumerate非常有用,如果您想就地更改它。试试这个:

for idx, elem in enumerate(lis):
    if len(elem) > 5:
        list[idx] = elem.upper()
于 2013-01-10T00:24:05.893 回答
0

这是使用 for 循环执行您尝试的操作的正确方法。您的代码为列表使用了两个不同的变量名称:lis 和 list。变量 elem 是列表中的项目,而不是索引。要获取索引,您需要使用 enumerate()。Ashwini Chaudhary 展示的解决方案称为列表推导,是一种更好的方法。

for i, elem in enumerate(lis):
  if len(elem) > 5:
    lis[i] = elem.upper()
于 2013-01-10T00:31:00.053 回答