鱼C论坛

 找回密码
 立即注册
查看: 3289|回复: 13

【高手请进】急急急急急急急急急急急急急急

[复制链接]
发表于 2016-2-24 23:16:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 909922955 于 2016-2-24 23:17 编辑

我想实现的一个函数是:循环从str1中返回指定字符串name出现的位置(下标index),并将该下标的值添加到list1列表中,有几次添加几次,直到len(str1)
但是最后用程序调试的时候打印出的列表是空的....   新人求助!!!!! 代码如下:

str1 = 'aaaaaaabbbbbbbaaaaaaa'
list1 = []
index = 0
string = 'a'

while True:
    if index == len(str1):
        break
    idx = str1.index(name,index,len(str1))
    list1.append(idx)
    index = idx
   
print(list1)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-24 23:23:34 | 显示全部楼层
  在线等啊……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 08:26:32 | 显示全部楼层
不懂欢迎追问哈~
  1. >>> str1 = 'aaaaaaabbbbbbbaaaaaaa'
  2. >>> name = 'a'
  3. >>> list1 = [each for each in range(len(str1)) if str1[each] == name]
  4. >>> list1
  5. [0, 1, 2, 3, 4, 5, 6, 14, 15, 16, 17, 18, 19, 20]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-25 10:01:25 | 显示全部楼层
hldh214 发表于 2016-2-25 08:26
不懂欢迎追问哈~

谢谢大神哈... 单个字符可以,但是将name改为'aa'  这个表达式最后也是返回的空列表呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 11:20:01 | 显示全部楼层
909922955 发表于 2016-2-25 10:01
谢谢大神哈... 单个字符可以,但是将name改为'aa'  这个表达式最后也是返回的空列表呢

好吧, 这种情况相对复杂, 看不懂的欢迎追问
  1. str1 = 'aaaaaaabbbbbbbaaaaaaa'
  2. nameN = 'aa'
  3. length = len(nameN)
  4. listN = list(map(''.join, zip(*[iter(str1)] * length)))
  5. list_res = [each * length for each in range(len(listN)) if listN[each] == nameN]
  6. print(list_res)


  7. C:\Python34\python.exe E:/python/tmp.py
  8. [0, 2, 4, 14, 16, 18]

  9. Process finished with exit code 0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 16:12:00 | 显示全部楼层
按照@hldh214 方法1写一个name为多字符的程序。
  1. str1 = 'abaabaabbbbbbbaaaabaa'
  2. name = 'ab'
  3. list1 = [each for each in range(len(str1) - len(name) + 1) if str1[each : each + len(name)] == name]
  4. print(list1)
复制代码


结果:
  1. [0, 3, 6, 17]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 18:07:04 | 显示全部楼层
冬雪雪冬 发表于 2016-2-25 16:12
按照@hldh214 方法1写一个name为多字符的程序。

屌屌屌~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 19:20:12 | 显示全部楼层
hldh214 发表于 2016-2-25 11:20
好吧, 这种情况相对复杂, 看不懂的欢迎追问

围观大神代码,列表推导式还能这么写厉害厉害
有一处没看明白list(map(''.join, zip(*[iter(str1)] * length))) 是什么意思呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 19:21:14 | 显示全部楼层
冬雪雪冬 发表于 2016-2-25 16:12
按照@hldh214 方法1写一个name为多字符的程序。

还能这么写,好厉害~!
有一处没看明白 str1[each : each + len(name)], each:each是什么意思呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 19:26:54 | 显示全部楼层
shuofxz 发表于 2016-2-25 19:20
围观大神代码,列表推导式还能这么写厉害厉害
有一处没看明白list(map(''.join, zip(* * leng ...

具体哪里不明白呢?
*[iter(str1)] 是把这个iter解压成参数传给zip
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 21:16:12 | 显示全部楼层
hldh214 发表于 2016-2-25 19:26
具体哪里不明白呢?
* 是把这个iter解压成参数传给zip

我能说这句代码整个都不太明白吗。。。list(map(''.join, zip(*[iter(str1)] * length)))
我先去面壁一会儿
1、*[iter(str1)]还是不明白,iter()是将str1这个字符串转成迭代器吗?前面为什么又加一个*
2、 * length是要把前面那个复制length遍?
3、为什么要调用zip()这个方法呀?
4、map()是把第二个作为参数,挨个作用到第一个参数方法里面吗?那''.join又是做什么用的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 21:47:25 | 显示全部楼层
shuofxz 发表于 2016-2-25 21:16
我能说这句代码整个都不太明白吗。。。list(map(''.join, zip(* * length)))
我先去面壁一会儿{:10_262: ...

1. 是, 前面的*是把这个迭代器里面的每一个迭代对象当做参数传给父函数zip()
2. 是的
3和4我是看手册的demo写的= =
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-26 00:05:50 | 显示全部楼层
shuofxz 发表于 2016-2-25 19:21
还能这么写,好厉害~!
有一处没看明白 str1[each : each + len(name)], each:each是什么意思呀

加个括号好理解些str1[each : (each + len(name))],即从第each位开始取len(name)长的字符。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-26 09:04:33 | 显示全部楼层
冬雪雪冬 发表于 2016-2-26 00:05
加个括号好理解些str1[each : (each + len(name))],即从第each位开始取len(name)长的字符。

原来是这样~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-19 20:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表