C到Python:For循环

2024-09-21 02:43:32 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我用C写了一段代码,输出如下:

代码:

scanf("%ld",&N);
long long A[N];
for(i=1;i<=N;i++)
    scanf("%lld", &A[i]);
for(i=1;i<N;i++)
    for(j=i;j<=N-1;j++) {
        printf("%d %d\n", A[i], A[j+1]);

输入:

5
1 2 3 4 5

输出:

1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

如何使用Python3.7.x获得相同的输出?你知道吗

试过:

A = [1,2,3,4,5]
for i in range(len(A)):
        for j in range(len(A)):
            try:
                print(A[i],A[j+1])
            except IndexError:
                pass

尝试输出:

1 2
1 3
1 4
1 5
2 2
2 3
2 4
2 5
3 2
3 3
3 4
3 5
4 2
4 3
4 4
4 5
5 2
5 3
5 4
5 5

这是我得到的输出,它只是遍历每个循环,打印出值,从而得到重复的对。你知道吗

感谢您的帮助,谢谢!你知道吗


Tags: 代码inforlenrangepasslongprint
2条回答

您可以使用与c代码相同的逻辑,这意味着j将从i开始:

A = [1,2,3,4,5]
for i in range(len(A)):
        for j in range(i, len(A)):
            try:
                print(A[i],A[j+1])
            except IndexError:
                pass

另一个优雅的解决方案是使用itertools模块:

from itertools import combinations

A = [1,2,3,4,5]
comb = combinations(A, 2)
for c in comb:
    print(c)

不是这样做的:

  • 试试/,除了块很昂贵,实际上这里不需要它们
  • 那种形式的for不是很Pythonic

你应该尽可能地复制C循环。为此,[Python 3. Docs]: Built-in Functions - enumerate(iterable, start=0)很方便(允许处理元素索引)。此外,还使用了序列切片。你知道吗

>>> a = [1, 2, 3, 4, 5]
>>>
>>> for idx0, elem0 in enumerate(a):
...     for elem1 in a[idx0 + 1:]:
...         print(f"{elem0} {elem1}")
...
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

相关问题 更多 >

    热门问题