【问题标题】:Create list containing ['a', 'bb', 'ccc', ....] upto 26 'z'创建包含 ['a', 'bb', 'ccc', ....] 最多 26 个 'z' 的列表
【发布时间】:2019-08-27 19:09:27
【问题描述】:

问题说要创建一个包含元素 ['a', 'bb', 'ccc', 'dddd',... ] 的列表,最后一个元素应该是 26 个 'z'。我需要使用 for 循环来执行此操作,避免使用函数。

我尝试过的方法非常粗糙,但我想要一个更好的解决方案。我在开头添加了一个空格来说明字符串的乘法,但它给出了一个额外的“z”。

list1 = []
str1 = ' abcdefghijkelmnopqrstuvwxyz'
length = len(str1)
for i in range(1,length):
    c = (str1[i])*i
    list1.append(c)
print(list1)

输出是 27 'z's。

【问题讨论】:

  • 附带说明,您可以使用string.ascii_lowercase 将小写字母作为字符串。
  • 它说 str 没有 ascii_lowercase 的属性 ....你能详细说明一下吗?
  • 需要导入string模块,不要使用str.ascii_lowercase
  • @Techie5879 import string; string.ascii_lowercase,是 string 而不是 str
  • @MrGeek 如果没有库,那就太好了...

标签: python python-3.x list for-loop


【解决方案1】:

str1 中间有一个额外的e,开头还有一个额外的空格

str1 = ' abcdefghijkelmnopqrstuvwxyz'
#       ^<<<<<>>>>>>^<<<<<<<<

您可以使用string 模块来简单地获取字母:

>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> 

所以您可以将其用作直接输入:

import string
str1 = string.ascii_lowercase
list1 = []
length = len(str1)
for i in range(0,length):
    c = (str1[i])*(i+1)
    list1.append(c)
print(list1)

但是,不使用循环,您可以轻松地将其作为列表推导:

[char*(i+1) for i, char in enumerate(str1)]

如果你不想使用库:

>>> str1 = "".join(chr(65+i) for i in range(0, 26)).lower()
>>> str1
'abcdefghijklmnopqrstuvwxyz'
>>> 

【讨论】:

  • 这就是为什么测试很有价值。
  • 啊,解决了。但我认为这是一种非常粗略的方法,将字符串作为'abcdefghijklmnopqrstuvwxyz'......有没有办法在for循环中从a迭代到z?因为在这里我也必须添加一个空格,否则 a 会从输出中删除
  • @Techie5879 我不明白。从 a 迭代到 z?
  • @BlackThunder 我的意思是运行一个循环,使得每个字符都取值 a、b、c、d、....使用循环....而不像我一样取字符串跨度>
  • 哦,我明白了,但是如何运行循环? @BlackThunder 编辑:检查此链接:trinket.io/python/3f7f2ae876 这将删除第一个“a”。
【解决方案2】:

@BlackThunder,你确实有一个额外的e。如果你想要一个更简单的版本,看看这个:

str1 = 'abcdefghijklmnopqrstuvwxyz'
print( [ (i + 1) * s for i, s in enumerate(str1) ] )

或者只使用整数:

print( [ (i + 1) * chr(i + 97) for i in range(26) ] )

【讨论】:

  • 有没有办法避免取字符串?就像我不能在循环中从 a 迭代到 z 吗?
  • @Techie5879 如果只是想避免完全使用字符串,可以看看第二种解决方案
【解决方案3】:

这是我能想到的最简单的方法:

z = []
x = 1
for i in range (ord('a'),ord('z')+1):
    c =chr(i)
    z.append(c*x)
    x+=1
print(z)

【讨论】:

    猜你喜欢
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多