1
jin6220 OP a=['a','b','c','d']
n=7 c=0 while c < n: for b in a: print(b) c+=1 这样的为什么不行啊 不是 c <n 的调解不成立时候不再循环么? |
2
yangtukun1412 2016-10-22 22:32:06 +08:00 1
(l * (n // len(l) + 1))[:n]
|
3
hsj1992 2016-10-22 23:02:47 +08:00
看完条件和结果,第一个反应是输出完一遍 list1 内容后再次输出 n-list1.length 次。
那样的话可以写递归吧? 基准情形就是 n<=list1.length 。 |
4
reus 2016-10-22 23:11:18 +08:00
|
6
upczww 2016-10-22 23:34:40 +08:00 via Smartisan T1
2 楼的方法很好
|
7
rogerchen 2016-10-22 23:38:42 +08:00 1
[list1[i%len(list1)] for i in range(n)]
|
8
binux 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)) ``` |
9
XiaoxiaoPu 2016-10-22 23:46:34 +08:00 1
(list1 * 2)[:n]
|
10
sudoz 2016-10-22 23:47:13 +08:00
@yangtukun1412 66666
|
11
KKKKKK 2016-10-23 00:10:46 +08:00 via Android
这不是循环模运算嘛!
|
12
lululau 2016-10-23 00:43:34 +08:00
4L, 8L 正解
引战:还是 Ruby 写起来舒心: lst.cycle.take(n) |
13
shyling 2016-10-23 02:18:29 +08:00
这种简单的方法肯定是从 list 构造一个 stream(cycle),然后 take 咯
|
14
kkzxak47 2016-10-23 02:28:56 +08:00 via Android
import itertools
list(itertools.islice(itertools.cycle(list1), 0, n)) |
15
jin6220 OP @rogerchen [list1[i%len(list1)] for i in range(n)] 这个不错,原来 1%4 结果会是 1.。。
|
16
q397064399 2016-10-23 08:51:35 +08:00
取余大法好,凡是这种要回头遍历的都是取余
|
17
liushuaikobe 2016-10-23 10:21:48 +08:00
(list1 * 2)[:n]
|
18
BingoXuan 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 里面,个人觉得如果可以不写循环尽量不写循环。当需要调用的要素变多,编写循环就会更复杂。 |
19
wemore 2016-10-23 18:38:37 +08:00 via Android
没学过 py , py 里没有取模运算符吗
|
20
jackisnotspirate 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"])) ``` |
21
wnduan 2016-10-24 04:47:04 +08:00
|
22
jin6220 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 >>> |
23
jin6220 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 |
24
eote 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) |
25
eote 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)]]) |
27
yanzixuan 2016-10-25 14:32:51 +08:00
(list1*int(round(n*1.0/len(list1))))[:n]
|