|  |      1jin6220 OP a=['a','b','c','d'] n=7 c=0 while c < n: for b in a: print(b) c+=1 这样的为什么不行啊 不是 c <n 的调解不成立时候不再循环么? | 
|      2yangtukun1412      2016-10-22 22:32:06 +08:00  1 (l * (n // len(l) + 1))[:n] | 
|      3hsj1992      2016-10-22 23:02:47 +08:00 看完条件和结果,第一个反应是输出完一遍 list1 内容后再次输出 n-list1.length 次。 那样的话可以写递归吧? 基准情形就是 n<=list1.length 。 | 
|  |      4reus      2016-10-22 23:11:18 +08:00 | 
|  |      6upczww      2016-10-22 23:34:40 +08:00 via Smartisan T1 2 楼的方法很好 | 
|  |      7rogerchen      2016-10-22 23:38:42 +08:00  1 [list1[i%len(list1)] for i in range(n)] | 
|  |      8binux      2016-10-22 23:40:45 +08:00  2 ``` import itertools n=7 list1=['a','b','c','d'] print list(itertools.islice(itertools.cycle(list1), 0, n)) ``` | 
|  |      9XiaoxiaoPu      2016-10-22 23:46:34 +08:00  1 (list1 * 2)[:n] | 
|      10sudoz      2016-10-22 23:47:13 +08:00 @yangtukun1412 66666 | 
|      11KKKKKK      2016-10-23 00:10:46 +08:00 via Android 这不是循环模运算嘛! | 
|  |      12lululau      2016-10-23 00:43:34 +08:00 4L, 8L 正解 引战:还是 Ruby 写起来舒心: lst.cycle.take(n) | 
|  |      13shyling      2016-10-23 02:18:29 +08:00 这种简单的方法肯定是从 list 构造一个 stream(cycle),然后 take 咯 | 
|      14kkzxak47      2016-10-23 02:28:56 +08:00 via Android import itertools list(itertools.islice(itertools.cycle(list1), 0, n)) | 
|  |      15jin6220 OP @rogerchen [list1[i%len(list1)] for i in range(n)] 这个不错,原来 1%4 结果会是 1.。。 | 
|  |      16q397064399      2016-10-23 08:51:35 +08:00 取余大法好,凡是这种要回头遍历的都是取余 | 
|  |      17liushuaikobe      2016-10-23 10:21:48 +08:00 (list1 * 2)[:n] | 
|  |      18BingoXuan      2016-10-23 15:29:08 +08:00 import math (list1 * math.ceil( n / len(list1) ) )[:7] 简化这个问题: 从一个重复 list1 的列表里面取出前 n 个元素; 确定重复的倍数,重复次数是 list1 元素数量的倍数; n / len(list1)再进一即可找到倍数,但由于存在小数的情况,所以调用 math.ceil ()进一取整; 和 2L 的方法差不多,只是多调用 math 的 ceil 函数。在 python 里面,个人觉得如果可以不写循环尽量不写循环。当需要调用的要素变多,编写循环就会更复杂。 | 
|      19wemore      2016-10-23 18:38:37 +08:00 via Android 没学过 py , py 里没有取模运算符吗 | 
|      20jackisnotspirate      2016-10-23 21:30:08 +08:00 ``` func takeOrCompensate<T>(n: Int, arr: [T], initial: Int = 0) -> [T] { if n <= 0 { return [] } if arr.count == 0 { return [] } return [arr[initial % arr.count]] + takeOrCompensate(n: n-1, arr: arr, initial: (initial + 1)) } print(takeOrCompensate(n: 7, arr: ["a", "b", "c", "d"])) ``` | 
|      21wnduan      2016-10-24 04:47:04 +08:00 | 
|  |      22jin6220 OP wnduan 在 n=7 list1=['a','b','c','d'] 知道这两个结果如何输出结果 a b c d a b c ? 里回复了你   4 小时 49 分钟前   删除 @jin6220 前面已经各种正解了。如果要让你的代码得到期望的结果,在 for 循环里加个判断就行了,比如在 print() 前面来个 if c == n: break ============= 抱歉 准备回复您呢 点了回复却把你的回复隐藏了 也不知道如何再次显示。 嗯 这样一改 确实是简单多了。 a=['a','b','c','d'] n=7 c=0 while c < n: for b in a: if c==n: break print(b) c+=1 a b c d a b c >>> | 
|  |      23jin6220 OP @wnduan  抱歉 准备回复您呢 点了回复却把你的回复隐藏了 也不知道如何再次显示。 嗯 这样一改 确实是简单多了。 a=['a','b','c','d'] n=7 c=0 while c < n: for b in a: if c==n: break print(b) c+=1 | 
|  |      24eote      2016-10-24 14:28:40 +08:00 loop = lambda arr, n, result=[]:len(result) == n and result or loop(arr, n, result + [arr[(len(result)) % len(arr)]]) loop(list1, n) | 
|  |      25eote      2016-10-24 14:31:05 +08:00 没看清题目,应该是 loop = lambda arr, n, result=[]:len(result) == n and ' '.join(result) or loop(arr, n, result + [arr[(len(result)) % len(arr)]]) | 
|      27yanzixuan      2016-10-25 14:32:51 +08:00 (list1*int(round(n*1.0/len(list1))))[:n] |