【问题标题】:Split string containing "." without using inbuilt functions拆分包含“.”的字符串不使用内置函数
【发布时间】:2021-09-07 09:19:09
【问题描述】:

我需要在不使用内置函数的情况下拆分字符串并创建单词列表。请帮助我在逻辑中遗漏了一些东西

st="i.like.this.very.much"
wordlist=[]
i=0
j=0
while i<len(st)-4:
    if st[i]==".":
        i+=1
    else:
        j=i
        word=""
        while st[j]!=".":
            word+=st[j]
            j+=1
            print(word)
        wordlist.append(word)
        i+=len(word)       
print(wordlist)

输出: C:\Users\Desktop>python raja1.py

i.like.this.very.much
i
l
li
lik
like
t
th
thi
this
v
ve
ver
very
['i', 'like', 'this', 'very']

【问题讨论】:

  • 为什么你的外循环条件是从len(st)中减去4(恰好是much的长度和字符串中“.”的个数)?

标签: python arrays string list


【解决方案1】:

这是一个不使用len()append() 的快速而简单的解决方案(您可以稍后删除print()):

st="i.like.this.very.much"
sp=[]
c=""
for s in st:
    if s == ".": 
        sp=sp+[c]
        c=""
    else: c+=s
if s != ".": sp=sp+[c]
print(sp)

输出是['i', 'like', 'this', 'very', 'much']

【讨论】:

  • 为什么脏?简单明了。
  • 我只是说我没有对它进行过彻底的测试,也没有认真考虑过像“..string.with...weird.periods..”这样的字符串会发生什么.我认为在这种情况下它会添加一堆空字符串。我不确定所需的行为是什么。编辑:另外,变量名不是很具描述性。
  • 您在那里处理列表和字符串的效果令人惊叹。谢谢。
【解决方案2】:

您唯一的问题是您忽略了最后一个单词,因为您无缘无故地提前停止了 4 个字符。如果单词以句点结尾,您的循环只会转储单词。

遍历字符串的末尾。然后只需在循环之后再添加一个append -- 但请检查您是否有要添加的单词,以防输入以句点结尾:

if word:
    wordlist.append(word)

另外,你说你不能使用任何内置函数,但你假设的解决方案使用len

【讨论】:

  • 我在 4 点停了下来,因为它给了我一个 indexError。对不起,我刚刚开始竞争编码,所以请原谅我的愚蠢。但是你说的方法是给出相同的 indexError。我删除了 (-4) 并遍历了整个列表。我不明白为什么会这样。请帮忙
  • 我无法“帮助”解决您未完全指定且未发布任何代码的问题。请提供预期的minimal, reproducible example (MRE)。我们应该能够复制和粘贴您的代码的连续块,执行该文件,并重现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和所需的输出来测试我们的建议。还要考虑这是否是当前问题的延续(可能),还是单独的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多