1
lln133208 2016-12-27 16:09:24 +08:00
如果‘ ab ’和‘ a ’都没有呢?
|
2
imn1 2016-12-27 16:12:17 +08:00 1
1.用 in 判断
2.用 enumerate()返回 index 更方便 |
3
imn1 2016-12-27 16:17:19 +08:00
另外,主贴的逻辑是不是错了? if 在循环内,还不止一次呢
判断后再循环啊,那无论怎么最多也是只有一次循环吧 |
4
weyou 2016-12-27 16:19:03 +08:00 1
你那个是循环了 3 次, index 隐含了一次循环。
foundPos = -1 for pos, item in enumerate(list_test): if a == item: return pos elif a[0] == item: foundPos = pos return foundPos 都没找到的情况返回-1 |
5
weyou 2016-12-27 16:20:11 +08:00
怎么代码都乱了
|
6
coolair OP |
7
Kilerd 2016-12-27 16:38:25 +08:00
4 楼的估计是最好的答案了。
|
8
CoX 2016-12-27 16:46:01 +08:00
if a in list_test:
return list_test.index(a) if a[0] in list_test: return list_test.index(a[0]) return -1 为啥要循环呢? |
9
ipwx 2016-12-27 17:01:36 +08:00
我是来搞笑的:
findpos = (lambda items, s1, s2: (lambda f: ([i for (l, i) in sorted((x for x in (f(i, v) for (i, v) in enumerate(items)) if x))] + [-1])[0])(lambda i, v: (0, i) if v == s1 else ((1, i) if v == s2 else None))) print(findpos(['a', 'b', 'ab', 'ab'], 'ab', 'a')) print(findpos(['a', 'a', 'b'], 'ab', 'a')) print(findpos(['b'], 'ab', 'a')) |
10
kimchan 2016-12-27 17:16:42 +08:00
@Kilerd 确定 4 楼的答案是正确的吗.....题主的要求是, "ab"不在数组中时, 才去查"a"是否在数组中, 但是 4 楼的答案. 如果"ab" 在数组的后边, 那么会直接返回"a"的 index. 我认为遍历肯定是需要两次遍历了. 不过代码的质量上可以大大的改进.
我的想法是和 8 楼一样的. |
12
kimchan 2016-12-27 17:21:14 +08:00
|
13
ipwx 2016-12-27 17:26:24 +08:00
|
14
kimchan 2016-12-27 17:32:37 +08:00
@ipwx 擦, 我太年轻, 看错了. 以为 for 里边 2 个都是直接 return...你那行代码太长了哈哈哈. 看着头疼.
|
15
CoX 2016-12-27 17:42:03 +08:00
@ipwx 四楼的方法 当 list_test = ['a', 'b', 'a'] 时返回的是最后一个 a 的位置;当然 lz 也没说清这种情况下返回哪个。
|
16
Kilerd 2016-12-27 18:02:27 +08:00 1
|