質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

6回答

10585閲覧

python、rangeの複数範囲指定について

kankan0

総合スコア24

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/24 13:24

編集2019/06/26 16:04

rangeについてですが、例えば2~4と6~8をを指定したい場合には、以下のような書き方はできませんよね?

python

1for r in range(2-4, 6-8): 2 print(r)

出力
2
3
4
6
7
8

このように、範囲が複数にまたがっている場合、どのように記述しますか?
1度のrangeで書けないようでしたら、2度のrangeに分けるしかないですか?

Python 3.7.3

ご回答頂いた方へ

現在多忙につき、Pythonを触る時間がありません。
後日回答内容を見させて頂きます。
すみません、ご了承下さい。
取り急ぎご連絡まで。

見させて頂きました。^^
いろんな方法をお示し頂き勉強になりました。
ありがとうございました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ベストアンサー

標準ライブラリ itertools の chain 関数 を使えばいけます。

python

1import itertools 2chain = itertools.chain(range(2, 5), range(6, 9)) 3for i in chain: 4 print(i)
>>> for i in chain: ... print(i) ... 2 3 4 6 7 8 >>>

投稿2019/06/24 13:49

編集2019/06/24 13:51
nico25

総合スコア830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

遅延評価のメリットを潰しても良いのなら、簡潔なのはこうでしょうか。

Python

1for r in [*range(2, 4), *range(6, 8)]: 2 print(r)

投稿2019/06/24 13:53

LouiS0616

総合スコア35676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これもありかな。

python

1def ranges(*r): 2 for args in r: 3 yield from range(*args) 4 5 6for i in ranges((2, 4), (6, 8)): 7 print(i)

投稿2019/06/25 00:40

YouheiSakurai

総合スコア6149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考情報

  • Concatenating two range function results

https://stackoverflow.com/questions/14099872

python range concat
で google 検索してみました。

投稿2019/06/24 23:02

katoy

総合スコア22328

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

無駄にジェネレータ式でがんばるとこうなります。リストを生成する方法と比べればパフォーマンス面では有利なはずです。

python

1>>> for i in (x for r in (range(2, 5), range(6, 9)) for x in r): 2... print(i) 3... 42 53 64 76 87 98

投稿2019/06/24 14:01

hayataka2049

総合スコア30939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんなのだめですか?

Python

1for r in [i for i in range(2, 5)] + [i for i in range(6, 9)]: 2 print(r)

###追加

Python

1for r in list(range(2, 5)) + list(range(6, 9)): 2 print(r)

投稿2019/06/24 13:42

編集2019/06/24 13:50
kazuma-s

総合スコア8222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問